属性

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

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