属性修饰词

属性修饰词 - 忙人xu - 博客园

1.readwrite readonly

2.nonatomic  atomic

3.assign weak strong 

一般来说,我们都用assign去修饰OC的基本数据类型,but why?

因为assign并不会使对象的引用计数加1,也就是说如果用assign去修饰一个对象,这个对象会立即被释放,重要的是assgin在被释放的时候是不会自动置为nil,还是保留对象的指针地址,会形成野指针

此外weak必须用于修饰对象,这和他自动置为nil相关,如果强行使用weak修饰基本数据类型,编译器会报一个大大的红色错误!

4.copy mutable copy

5.copy strong

通过上述对copy与strong的描述,copy和strong最终都会返回一个引用计数为1的对象,所以单单从内存管理上说copy和strong并无任何区别,但是copy始终会返回一个不可变对象,他的值是不会被修改的。

而strong不同,被strong修饰的对象,可能会被可变对象赋值,从而在外部导致不可预料的被更改的情况。

总而言之,是否使用copy或strong还是根据具体场景来定,这里还有个性能优化的小技巧,如果copy的是可变的对象,会对它做一次完全深拷贝/不完全深拷贝,性能上是肯定不如strong直接引用计数+1来的快。

6. __autoreleasing

全局变量和实例变量是无法用__autoreleasing来修饰的,不然编译器会报错,而局部变量用__autoreleasing修饰后,其指向的对象,在当前autorelease pool结束之前不会被回收:



Objective-C之MRC、ARC模式下,属性修饰关键字strong、retain、assign、weak的区别和联系 - i左撇子 - 博客园

注意 retain在ARC中可以使用


bool 和BOOl的区别

1、类型不同

BOOL为int型

bool为布尔型

2、长度不同

bool只有一个字节

BOOL长度视实际环境来定,一般可认为是4个字节

3、取值不同

bool取值false和true,是0和1的区别

BOOL取值FALSE和TRUE,是0和非0的区别

你可能感兴趣的:(属性修饰词)