内存泄露:就是该释放掉的对象没有释放
调用autorelease 的对象,系统会在恰当的时候给它发送一条release消息
MRC--父类的dealloc放到最后
MRC--set方法的内存管理,先释放掉以前的,在把新的进行retain加1
MRC--优化写法,只有传进来的新值跟旧值不一样时,才执行旧值的release操作,新值的retain操作
@synthesize 左边是属性名,右边是成员变量名
@synthesize的作用
在以前@property声明的属性只会帮我们生成set方法和get方法的声明,不会帮我们生产成员变量,set方法和get方法的实现。--但是随着编译器的发展,property声明的属性会帮我们生成set方法和get方法的声明,并且生成带下划线的成员变量,以及set方法和get方法的实现
不管左边的调用者是谁,只要调用的是copy方法,返回的就是不可变的。只要调用的是mutableCopy,返回的就是可变的
不可变对象调用copy时,copy就相当于retain,
不可变数组的浅拷贝,深拷贝
可变数组的浅拷贝,深拷贝
NSArray *array1 = [[[NSArray alloc] initWithObjects:@"a", @"b", nil] autorelease];
等价于NSArray *array1 = [NSArray arrayWithObjects:@"a",@"b", nil];
fundation里面的很多类,一般通过类方法创建出来的类,里面都已经做了autorelease操作了
原则:只要这个对象不是通过alloc创建或者new创建返回的,一般就不需要进行release操作
array方法里面大概长这样
不可变字典的浅拷贝,深拷贝
可变字典的浅拷贝,深拷贝
copy和mutableCopy总结
p1调用copy方法的话,调用的就是p1下面的copyWithZone方法
自定义类的copy,需要遵守NSCopying协议
网友评论