首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Objective-C中浅谈面向对象

接触面向对象也有一段时间了,当时是通过C++学习的OOP,后来又接触到了PHP和Java。...刚接触OC,用OC中的便利初始化方法和便利构造器有点蹩脚,不过还可以在接受的范围之内,以下的东西可能会对面向对象的特征:抽象,封装,继承等总结的较少一些,主要总结了OC中面向对象的特点。...简单的说来,便利构造器是为了简化对象的初始化而生的,在之前的博客中也说了一嘴:编程是间接的过程,其实使用便利构造器就是间接的过程。在程序中处处都用到了间接。...而便利构造器是类方法,返回的是对象,在便利构造器中做了两件事:一个是给对象分配空间,第二个是调用便利初始化函数进行数据的初始化。...3.在OC中对象调用其中的方法是通过[]来实现的,[对象名   方法名];     ​    ​  定义对象的语法:     ​    ​    ​    ​类名    ​*对象名 = [  [ 类名

1.1K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在 Objective-C 中,如何有效地处理内存管理以避免内存泄漏?

    在 Objective-C 中,可以通过以下几个方法来有效地处理内存管理以避免内存泄漏: 使用自动引用计数(ARC):ARC 是一种自动内存管理机制,它可以自动地插入 retain、release 和...autorelease 方法来管理对象的内存,大大减少了手动内存管理的工作。...使用零强引用:在某些情况下,可以使用零强引用(zeroing weak reference)来避免野指针的出现。零强引用会在对象释放后自动置为 nil,避免了野指针的问题。...使用 autorelease pool:在循环中创建大量的临时对象时,可以使用 autorelease pool 来减少内存的占用。...总之,了解内存管理规则、使用自动引用计数、避免循环引用、使用合适的集合类和调试工具,都是有效处理内存管理以避免内存泄漏的重要方法。

    10010

    属性“__attribute__”在Objective-C中的应用

    属性“__attribute__”在Objective-C中的应用       关于__attribute__,你可能用的不多,但是一定经常见到,在系统的Foundation框架中,__attribute...首先,__attribute__用于在函数,变量或类型声明时进行特殊属性设置的编译器指令。需要注意,它是一种编译器指令,这也就表明了使用它我们可以做更高级的检查与优化功能。...8. objc_requires_super       这个属性用来修饰Objective-C中父类的方法,如果子类进行了重写,在重写的方法中没有调用父类方法,则会进行编译器提示。...在实际编程中,很多时候,都是由于子类重写了父类的方法造成不可预知的问题,通过使用这个属性可以有效的对开发者进行提示,例如: ?...11. objc_runtime_name       这是一个很有趣的属性,其可以运行时改变Objective-C类的类名,但是不会影响其行为。

    2.4K20

    objective-C中的扩展方法与partial class

    PrintToConsole(); } } 在objective-C中,也有类似的处理办法: StringUtils.h 定义部分 #import C中,这种情况下开发人员新增加的重名方法会覆盖系统原有的方法,而且没有任何提示!一个好的习惯是为所有扩展方法(包括类名),都加一个特殊的前缀或后缀,以避免重名。...下一个话题:partial class 做过asp.net开发的程序员都知道,c#中的partial class可以方便的将同一个类的代码,分散在多个不同的物理文件中,编译器在编译时能自动将它们合并。...表面上看,partial class与扩展方法是风马牛不相及的二个概念,但是在obj-C中,这二个其实是一回事。...productNo:0001 皆大欢喜,很多语言和技术真是“一门通,处处通”,也许:c#中的"扩展方法"与"部分类"的设计灵感正是来自objective-C。

    86470

    iOS——Objective-C 对象的结构分析

    一、 lldb 探索isa 定义一个 SHPerson 对象,在 main 函数初始化并断点调试。...第二次打印是class对象的内存分布,并且 0x00000001000080c0(isa) & 0x0000000ffffffff8ULL,得到的内存地址为 0x00000001000080c0,po打印的结果是名为...对比第一次第二次的打印,两个分别为0x00000001000080e8和0x00000001000080c0的内存地址,打印的出来的class对象的名称是一样的。...再对比前两次的打印,发现是不一样的,0x00000001003790f0和0x00000001000080e8、0x00000001000080c0打印出来的class对象名称是不一样的。...发现,00000001000080E8, 00000001000080C0的内存地址不就是上面提到要研究的么,再根据value这一列的值,就可以得知,0x00000001000080e8是类对象, 0x00000001000080c0

    49330

    Objective-C对方法进行注释的方法

    名字看着挺绕的哈,其实就是对某个自己创建的方法进行注释,类似编写java代码时的注释javadoc一样,可以自动形成规范性的方法说明。...我们对方法进行注释时,最需要说明的就是方法的作用、方法的参数以及方法返回的结果,所以这里也只说这三个标签,其实很简单,如下所示: /** * @brief 通过两个参数请求一个结果....brief表示方法的介绍,param表示参数,如果有多个就多次使用标签,这样在显示时也会显示的更好看,return表示返回的结果。...现在我们调用方法,然后在调用的地方对着方法名,按住option键,也就是alt键,再点击方法名,就会弹出方法的说明,这时就可以看到我们注释的效果了: 这样是不是很清晰明了。...虽然在声明方法时会做很多额外的工作,但是当代码量大了以后,这样做的效果就出来了,免得总是忘记各个方法是做什么的,参数又是什么,毕竟不能总是依靠起名嘛。

    46120

    Objective-C中NSInvocation的使用

    OC中调用方法某个对象的消息呦两种方式: #1. performanceSelector: withObject: #2. NSInvocation....对象, 在这之前最好先判断下前面创建的signature是否为nil, 方法不存时就是nil NSInvocation *invocation = [NSInvocation invocationWithMethodSignature...:signature]; //设置方法的调用者 invocation.target = self; //设置方法名, 这里一定要跟方法签名类中的方法名一致 invocation.selector...} 2、方法的参数个数与外界传进来的参数数组元素个数不符 //此处不能通过遍历参数数组来设置参数,因为外界传进来的参数个数是不可控的 //因此通过numberOfArguments方法获取的参数个数,是包含...self和_cmd的,然后比较方法需要的参数和外界传进来的参数个数,并且取它们之间的最小值 NSUInteger argsCount = signature.numberOfArguments - 2;

    74920

    C++中检查浮点数值有效性

    参考链接: C++ copysign() 今天在项目中检查到一个bug,程序会在某些情况下崩溃,最终认定是计算一个比值时,被除数和除数均为零,导致计算结果是个无效值,在后面的代码将使用这个无效值时导致了崩溃...需要对这个结果是否有效进行判断。 ...下面列出 IEEE 推荐的对浮点型的常用函数,包括特殊值(无穷、无效)的判断:  /* These are also declared in Mingw float.h; needed here as...) 求输入数是2的多少次幂,返回值对确切结果向0取整;  _nextafter (double x , double y) 输出x对y方向在double精度上的下一个值;   _scalb (double...x, long i) 输出x乘以2的i次幂的结果;  _finite (double) 检查输入是否有效,若为 INT 或 NaN 则返回0,有效数值返回1;  _fpclass (double) 返回一个浮点数的分类

    1K20

    Objective-C中的内存管理

    OC中使用引用计数和垃圾回收来管理内存,在OC中为每个对象分配一个引用计数器,当对象刚刚被创建时其初始值为1,当有某段代码需要访问一个对象是时,会将该对象的引用计数器加1(通过retain来实现);当访问一个对象结束时...在NSObject类有一个retainCount方法,调用该方法可获取当前对象的引用计数值。         ...等方法的,需要在XCode中进行设置,设置如下: 把Objective-C Automatic Reference Counting 改为NO,即可。     ​    ​...(3).在可变数组中移除一个str,观察retainCount的变化     ​    ​    ​(4)我们为什么要用可变的字符串呢?稍后会提到为什么。...FomatRetainCount = 3 2014-08-03 20:18:37.240 Memory[2499:303] 传入的变量RetainCount = 3     ​Objective-C中得

    81290

    Objective-C中的集合类

    下面详细的介绍Objective-C中的集合类以及每个集合类的用法,学过其他面向对象编程语言的小伙伴们看到OC的集合类会有种莫名的亲切感,理解起来问题不大,可以类比Java中的集合类去学习...在Objective-C中的集合类中主要包括不可变的数组--NSArray,  可变的数组--NSMutableArray,   不可变的字典--NSDictionary,    可变的字典--NSMutableDictionary...一、数组         1.不可变的数组  NSArray             数组是有序对象的集合,用来存储对象的有序列表,在OC中数组中必须存的是对象,不能是基本数据类型,若想存入基本数据类型...NSArray也是OC中的一个对象,使用NSArray也需要进行实例化,前面的博客在类的初始化中提到了便利初始化函数和便利构造器,在NSArray中也少不了这两样东西我们可以通过NSArray的便利初始化函数或者便利构造器进行...    ​    ​前面不止一次的提到在OC中的集合类中是不能放基本数据类型的,那么我们如何把基本数据类型封装成对象呢?

    1.1K70

    Objective-C中的属性机制

    Objective-C 2.0中的属性机制为我们提供了便捷的获取和设置实例变量的方式,也可以说属性为我们提供了一个默认的设置器和访问器的实现。...@protected :受保护的,该实例变量只能在该类和其子类内访问,父类protected的实例变量在子类中是private的默认是protected;         3....@end   2.属性的实现  在实现文件中我们用@synthesize来实现,用@synthesize来修饰相应的变量就起到类getter 和 setter 的方法实现的作用。...在使用getter和setter方法时有一点要注意:以neme为例,getter方法名为 name, 而setter的名为 setName;在使用getter和setter方法时和普通的函数用法一样 ​...中的语义 :决定了以何种方式对数据成员赋予新值     strong : 表示强引用关系,即拥有对象的所有权。

    1.3K70

    MessageMock : 优雅的模拟 Objective-C 方法

    拿到切面过后,就可以拦截到所有的 Objective-C 方法调用,具备了做任何“坏事”的条件。...但值得注意的是,MessageMock 代码必经路径不能包含任何的 Objective-C 方法调用,不然会死循环,所以源码大部分是使用 C++ / Assembly 实现的。...,编译器不能在合适的地方插入retain,那这些 Objective-C 对象就可能提前释放(比如当前作用域结束)。...当自定义的方法返回值和入参是 Objective-C 对象时,这里称之为游离对象便于理解。 游离对象的生命周期 对于游离对象,目前是通过__bridge_retained将目标对象引用计数加一。...上层使用的考虑 而考虑到上层接口是在 Objective-C 环境中运行,若一个作用域还未结束,这个MethodMatcher *就被释放了就会 Crash,所以上层接口层面是这样设计的: @implementation

    85720

    Objective-C中的语法糖

    当时把注意力放在了深浅拷贝的内存地址分析上了,就没太在意,测试做完啦,在回顾的时候发现数组是用下标的方式获取的! 于是就有了个疑问,在OC中这样写也行?...不是NSArray中有一个方法叫做objectAtIndex来专门获取数组的元素嘛,嗯~用下标也行?此时心里窃喜,可以简化一下数组访问元素的方式了,又可以偷懒啦!!...为了更好的偷懒,于是去百度上Google啦一下这是‘ Xcode 4.4中LLVM compiler 4.0’ 引入的新特性(2012年WWDC发布的东西)。...    在之前的博客中我是这样初始化NSArray的: 1 //NSArray的便利初始化 2 NSArray *array1 = [[NSArray alloc] initWithObjects:@...= @11.2; NSNumber *c = @('a'); NSLog(@"a = %@, b = %@, c = %@", a, b, c);

    1K50

    Objective-C中runtime机制的应用

    Objective-C中runtime机制的应用 一、初识runtime         Objective-C是一种动态语言,所谓动态语言,是在程序执行时动态的确定变量类型,执行变量类型对应的方法的...因此,在Object-C中常用字符串映射类的技巧来动态创建类对象。因为OC的动态语言特性,我们可以通过一些手段,在程序运行时动态的更改对象的变量甚至方法,这就是我们所说的runtime机制。...,首先,在头文件中没有提供任何的方法接口,我们没有办法使用点语法做任何操作,privateOne和PrivateTow两个变量虽然声明在了头文件中,却是私有类型的,通过指针的方式我们虽然可以看到他们,却不能做任何读取修改的操作...int型变量的时候,你或许会遇到一个问题,ARC下,编译器不允许你将int类型的值赋值给id,在buildset中将Objective-C Automatic Reference Counting修改为...五、让我看看你的方法吧         变量通过runtime机制我们可以取到和改变值,那么我们再大胆一点,试试那些私有的方法,首先我们在MyObject类中添加一些方法,我们只实现,并不声明他们: @

    40850

    Objective-C中的继承和多态

    在Objective-C中super是指向直接父类的指针,而self是指向本身的指针,self就相当于java中的this指针。...在OC中写类时可以在@implementation中定义哪些在@interface中无相应声明的方法,但这个方法是私有的,仅在类的实现中使用。         ...在Objectiv-C中几乎所有的类都是继承自NSObject类,NSObject类中存在大量功能强大的方法。下面对NSObject类中的各种方法进行试验和介绍:         1....= str1"); }     ​    ​Objective-C中的继承         继承是is-a的关系,比如猫咪是一个动物,那么动物是父类,而猫咪是动物的子类。...2014-07-30 08:38:12.958 HelloOC[483:303] 我是富二代BILL`s son,我超喜欢飙车 ​Objective-C中的多态     ​    ​多态简单的说就是对于不同对象响应同一个方法时做出的不同反应

    1.2K80

    Objective-C中的Block(闭包)

    用大白话说就是匿名函数,也就是在函数中可以包含这函数。就是在函数中可以定义匿名函数然后在函数中调用。...学习OC中的block之前也小担心一下,Block在OC中属于高级的部分,心里有又有个疑问:学起来难不难?...小伙伴们如果没大看懂下面的东西,请去上面的博客中进一部的了解一下block.  1.局部变量可变对象和不可变对象在block中的引用             下面会提供一部代码,这部分代码的功能是定义两个局部变量...,一个是可变对象,一个是不可变对象,然后再定义一个Block, 在block中引用两个局部变量。...2.成员变量在block中的使用     ​    ​成员变量在block中的使用是加上self->a使用的,所以在声明成员变量的时候加不加__block,在成员函数中的代码块中都可以访问修改;     ​    ​

    1.5K90

    Objective-C中NSArray类的解读

    Objective-C中NSArray类的解读     NSArray数组类是Objective-C语言中常用的也是重要的一个类,除了开发中常用到的一些基础功能,NSArray及其相关类中还封装了许多更加强大的功能...NSArray中属性与方法: //获取数组中元素个数 @property (readonly) NSUInteger count; //通过下标获数组中的元素 - (ObjectType)objectAtIndex...:(NSUInteger)index; //初始化方法 - (instancetype)init; //通过C语言风格的数组创建NSArray对象 需要注意,C数组中需要为Objective对象,cnt...; //像数组中追加一个元素 这个方法会返回一个新的数组 - (NSArray *)arrayByAddingObject:(ObjectType)anObject; //像数组中追加一组元素...C数组中 objects参数需要为分配好空间的C指针 - (void)getObjects:(ObjectType __unsafe_unretained [])objects range:(NSRange

    1.3K20
    领券