6.@property的参数:
atomic(额拖米可): 原子性,安全,但速度较慢,默认是这个
nonatomic(nang额拖米可): 非原子性,速度快,但是安全性较差.一般iOS中用这个
assign(额塞恩): MRC中给给对象实例变量赋值,或者给基本数据类型赋值(ARC)中也用这个
retain(瑞疼): MRC中给对象实例赋值.新值与原值不相同,先release原值,再赋新值,并retain新值,如相同则什么都不做
strong: ARC下表示用强指针指向该对象
weak: ARC下表示用弱指针指向该对象
copy: 用于NSString和block类型,复制一个新副本
"setter:" = "xxx:" 将setter方法重命名为"xxx:", 注意':'
"getter" = "xxx" 将getter方法重命名为"xxx"
7."retain"和"copy"的区别
// 这是框架后面的内容
retain并没有创建新的对象,只是拷贝原对象的地址,并让其引用计数+1
copy是创建了一个新的副本对象,对象的引用计数为1.Oc
8.@class的作用以及与#import的区别
告诉编译器这是一个类,而要编译器不用去关心类的实际内容.在需要使用类时,在.m文件中再导入该类的头文件
与#import的区别:
#import实际相当于内容的复制.当一个头文件被多个类引用时,如果其内容被修改,则所有引用该.h文件的类都需要重新编译,效率低.并且当两个类有相互引用时,使用#import会报错
@class只是声明类,而不会去关心类的内容,只有在使用时才在.m中导入该类.h文件.当.h文件被修改时,不需要重新编译,大大提高效率.并且@class可以防止重复引用的问题
9.autorelease自动释放
作用:在@autoreleasepool结束时或者被手动释放时,会对池中所有"加入了该池"的对象进行一次release操作,可以不再关心release的调用时间,也不需要再关心对象释放的时间
"autorelease与release的区别": "重要"
release是立即执行对象的retainCount-1操作,而autorelease是让对象加入自动释放池,并不立即执行计数器-1操作,在自动释放池结束时再执行release操作,相当于release操作的延迟
10.autorelease使用的注意
1.只有在池内调用autorelease方法才加入自动释放池: [obj autorelease]
2.每调用一次autorelease操作,自动释放池结束时会执行一次release操作,所以不要多次调用
3.自动释放池是释放的延迟,不要在池内创建过多的对象,也不要对占用内存大的对象使用autorelease
4.自动释放池嵌套:栈顶层池中的对象最先释放
|
|