1.ARC的概念及原理
指针的分类:强指针和弱指针;
默认情况下指针都是强指针,关键字_ _strong;弱指针关键字 _ _ weak;
ARC是自动内存管理,它是一个编译器的特性,就像点语法。只不过是编译器帮我们添加并且不允许我们自己使用retain,release,autorelease,retainCount,dealloc方法中不能使用[super dealloc]。
ARC的判断准则:
只要没有强指针指向对象,就回收!呵呵,忘记引用计数器吧O(∩_∩)O
单对象的内存管理:
强指针改变指向的时候,弱指针会赋值为nil;
多个对象的内存管理:
注意@property参数weak strong的使用。
ARC循环引用:
一端使用strong 一端使用weak
ARC下set方法的内存管理,@property参数问题:
原子性和读写性 与MRC下相同
set方法中MRC下的retain 在ARC下换成strong 和 weak ,copy都一样。
OC的其他对象 使用strong
UI的控件一般使用weak
ARC的兼容和转换:
-fno-objc-arc 转换为非ARC
-f-objc-arc
在Xcode中更改。这就是兼容啦。╮(╯▽╰)╭
MRC和ARC可以转换,Edit--Refactor---但是不能保证完全正确。哎,就是项目太大啦,类好多啊 ,你也不是很懂。
2.分类(Category)
Category:分类 类别 类目 一般叫分类;是OC的特有语法;
在不修改原有类的基础上,增加新的方法;把一个庞大的类分成模块进行开发;有利于团队协作!\(^o^)/~
目的:对现有的类扩展;作为子类的替代手段;对类中的方法归类;
先声明 然后实现 最后使用
分类的接口只需要带个()表示分类的作用,不需要冒号。
@interface 待扩展的类名 (分类名称)
@end
@implementation 待扩展的类名 (分类名称)
@end
注意:
分类只能增加方法,不能增加成员变量;
可以在分类的方法中访问原来类的成员变量;
优先调用分类的方法,优先调用同名方法中最后编译的方法;
分类的非正式协议:
非正式协议通常定义为NSObject的类别(分类,类目);
也就是说,凡是NSObject或者其子类Foundation框架中类增加的类别,都是非正式协议。
分类的延展:Extension
又称扩展,分类名为空,就是扩展。可以给类增加实例变量,方法,合成的属性;
扩展的方法实现不能在@implementation 类名()中,要在当前的类中@implementation 类名
延展可以定义相对私有的方法。不能被子类继承。