Objective-C知识总结

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

ARC(automatic reference counting)机制

判断是否是ARC机制

ARC机制中不能使用retain release autorelease retainCount在dealloc方法中不能使用 [super dealloc];

在ARC下对象释放的判断依据: 对象没有强指针指向

指针默认的都是强指针,比如我们创建的对象都是默认的强指针

Person *p1 = [[Person alloc] init];

__strong 修饰符,修饰这个指针是一个强指针,也可以不写

__weak 修饰的这个指针是弱指针

ARC下的循环引用问题

当两个对象互相拥有的时候,如果定义的时候都用strong,那么就会导致循环引用的问题,双方互相强指针指向,不能被释放

解决这个问题的方法是:将其中一个以weak定义,就能完美解决这个问题了

ARC下set方法内存@PRoperty参数

ARC中的@property

strong:用于OC对象,相当于MRC中的retain

weak:用于OC对象,相当于MRC中的assign(代理一般用weak,UI控件一般用weak)

assign:用于基本数据类型,跟MRC中的assign一样

copy:一般用于NSString,跟MRC中的copy一样

ARC注意:

__weak Person *p=[[Person alloc] init];//不合理,对象一创建出来就被释放掉,对象释 放掉后,ARC把指针设置为nil。

如何让ARC的项目兼容非ARC的类

让程序兼容ARC和非ARC部分

转变为非ARC -fno-objc-arc转变为ARC的, -f-objc-arc 在哪里添加编译器标示 -fno-objc-arc如下图

将MRC转化为ARC(不建议这么使用,若要尝试做好备份)

分类(Category)

分类的使用注意事项:

--------->在分类的声明中不能声明实例变量

--------->不能定义实例变量 也不能使用 @property

--------->在分类的方法中,可以访问类中的实例变量

--------->在分类中存在和类同名的方法 优先访问的时 分类中 的方法

当在多个类别中有同名的方法的时候,这时候,执行的最后编译的那个类别的同名方法

分类的 > 原类

最后编译的分类 > 其他的分类

分类(Category)非正式协议

非正式协议就是给NSObject类或Foundation框架中的子类创建的类目(分类),即给它们添加方法,叫做非正式协议

类的延展的概念

延展类别又称为扩展(Extendsion)

Extension是Category的一个特例 其名字为匿名(为空),并且新添加的方法一定要予以实现。(Category没有这个限制)

//这个一般用在.m文件中,作为私有的方法和成员变量@interfaceStudent ()

{//可以添加成员变量}//添加方法@end

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航