语法上的小问题
2016-05-22 本文已影响18人
kingandyoga
语法上的小问题
深拷贝(mutableCopy)跟浅拷贝(copy)
首先看一组照片:
alt text简单来说:深拷贝就是内容拷贝;浅拷贝就是指针拷贝。
系统对象的copy跟mutableCopy方法
无论是集合类对象,还是非集合类对象,接收到copy跟mutableCopy消息时,都会有以下准则:
- copy返回imutable对象;如果返回mutable就会崩溃
- mutableCopy返回mutable对象
[immutableObject copy] // 浅复制
[immutableObject mutableCopy] //非集合深复制 集合单层深复制
[mutableObject copy] //深复制
[mutableObject mutableCopy] //非集合深复制 集合单层深复制
更多信息可以参考这里
Property的修饰符
- 默认是strong类型
- xib/storyboard链接的对象可以用weak,是因为IBOutlet的view不被释放,这个链接的对象的引用计数不会为0.
- block声明使用copy
- 字符串使用copy
- 属性声明修饰符有:strong, weak, unsafe_unretained, readWrite,默认strong, readWrite的。
- 没有指明是nonatomic的时候,默认时候atomic原子操作,会影响性能。
ARC下重写 Getter and Setter
- 只重写setter和getter其中之一,可以直接重写:
@property (nonatomic, strong) NSMutableArray *array;
- (void)setArray:(NSMutableArray *)array {
if (_array != array) {
_array = nil;
_array = array;
}
}
- 两个一起重写的时候
@property (nonatomic, strong) NSMutableArray *array;
@synthesize array = _array;
- (void)setArray:(NSMutableArray *)array {
if (_array != array) {
_array = nil;
_array = array;
}
}
- (NSMutableArray *)array {
return _array;
}
or
@interface ViewController : UIViewController{
NSMutableArray *_array;
}
- (void)setArray:(NSMutableArray *)array {
if (_array != array) {
_array = nil;
_array = array;
}
}
- (NSMutableArray *)array {
return _array;
}