ARC模式下的strong、weak
MRC模式下的retain、release、dealloc
二者共有的:copy、assign
strong和weak:
strong相当于MRC下的retain,weak相当于assign。 ARC(iOS 5 推出的)默认情况下都是strong。注意有一种情况,即循环引用的时候需要用weak。 那么,strong修饰的属性,它的引用计数+1,weak修饰的属性则不加。
举个例子:
@property (nonatomic, strong) NSString *string1;
@property (nonatomic, strong) NSString *string2;
代码为:
self.string1 = @"String 1";
self.string2 = self.string1;
self.string1 = nil;
NSLog(@"String 2 = %@", self.string2);
结果是:String 2 = String 1
由于string1和string2都是strong定义的属性,所以各自的引用计数+1,这使得它们可以指向值且都是@"String 1"。
接着我们来看weak关键字:
如果这样声明两个属性:
@property (nonatomic, strong) NSString *string1;
@property (nonatomic, weak) NSString *string2;
代码为:
self.string1 = @"String 1";
self.string2 = self.string1;
self.string1 = nil;
NSLog(@"String 2 = %@", self.string2);
结果是:String 2 = null
由于self.string1与self.string2指向同一地址,且string2没有retain内存地址,而self.string1=nil就释放了内存,所以string2为nil。
以上来自http://www.cnblogs.com/mybkn/archive/2012/03/08/2384860.html
dealloc
它的作用是:当对象的引用计数为0,系统会自动调用dealloc方法,回收内存。
那么为什么需要调用父类的dealloc方法?因为子类的某些对象实例是继承自父类的。因此,我们需要调用父类的dealloc方法,来释放父类。
copy