iOS36 -- 内存管理MRC以及copy修饰词

iOS36 -- 内存管理MRC以及copy修饰词_第1张图片
该命令行项目运行完,就直接退出了。程序退出了,你刚刚没有释放掉这个person,也没有关系,因为你整个程序都被干掉了,也就是刚刚没有释放掉的内存,也全都会被销毁,这个是没有问题的。因为只要程序一退出,内存泄露啊,刚刚忘掉释放的内存啊,都不要紧
内存泄露:就是该释放掉的对象没有释放 
调用autorelease 的对象,系统会在恰当的时候给它发送一条release消息
iOS36 -- 内存管理MRC以及copy修饰词_第2张图片
MRC--父类的dealloc放到最后

iOS36 -- 内存管理MRC以及copy修饰词_第3张图片
MRC--set方法的内存管理,先释放掉以前的,在把新的进行retain加1

iOS36 -- 内存管理MRC以及copy修饰词_第4张图片
MRC--优化写法,只有传进来的新值跟旧值不一样时,才执行旧值的release操作,新值的retain操作

iOS36 -- 内存管理MRC以及copy修饰词_第5张图片
@synthesize 左边是属性名,右边是成员变量名

iOS36 -- 内存管理MRC以及copy修饰词_第6张图片
@synthesize的作用

iOS36 -- 内存管理MRC以及copy修饰词_第7张图片
在以前@property声明的属性只会帮我们生成set方法和get方法的声明,不会帮我们生产成员变量,set方法和get方法的实现。--但是随着编译器的发展,property声明的属性会帮我们生成set方法和get方法的声明,并且生成带下划线的成员变量,以及set方法和get方法的实现

iOS36 -- 内存管理MRC以及copy修饰词_第8张图片

iOS36 -- 内存管理MRC以及copy修饰词_第9张图片
不管左边的调用者是谁,只要调用的是copy方法,返回的就是不可变的。只要调用的是mutableCopy,返回的就是可变的

iOS36 -- 内存管理MRC以及copy修饰词_第10张图片
不可变对象调用copy时,copy就相当于retain,


iOS36 -- 内存管理MRC以及copy修饰词_第11张图片

iOS36 -- 内存管理MRC以及copy修饰词_第12张图片
不可变数组的浅拷贝,深拷贝

iOS36 -- 内存管理MRC以及copy修饰词_第13张图片
可变数组的浅拷贝,深拷贝
 NSArray *array1 = [[[NSArray alloc] initWithObjects:@"a", @"b", nil] autorelease]; 
等价于NSArray *array1 = [NSArray arrayWithObjects:@"a",@"b", nil];
fundation里面的很多类,一般通过类方法创建出来的类,里面都已经做了autorelease操作了
原则:只要这个对象不是通过alloc创建或者new创建返回的,一般就不需要进行release操作
iOS36 -- 内存管理MRC以及copy修饰词_第14张图片
array方法里面大概长这样

iOS36 -- 内存管理MRC以及copy修饰词_第15张图片
不可变字典的浅拷贝,深拷贝

iOS36 -- 内存管理MRC以及copy修饰词_第16张图片
可变字典的浅拷贝,深拷贝

iOS36 -- 内存管理MRC以及copy修饰词_第17张图片
copy和mutableCopy总结

iOS36 -- 内存管理MRC以及copy修饰词_第18张图片
p1调用copy方法的话,调用的就是p1下面的copyWithZone方法

iOS36 -- 内存管理MRC以及copy修饰词_第19张图片
自定义类的copy,需要遵守NSCopying协议

你可能感兴趣的