繁体   English   中英

强弱财产有什么区别?

[英]what is the difference between strong and weak property?

由于iOS 5中的强弱属性是新的。如果有人告诉我何时使用了哪个属性。

什么时候应该使用强者还是应该使用弱者?

@property(nonatomic,strong)

@property(nonatomic,weak)

strong就像retainweak就像assign 主要区别在于,当分配给它们的对象被释放时, weak属性变为nil

例如:

@property (nonatomic, weak) id test;

...

- (void)example
{
    id foo = [[NSObject alloc] init];
    self.test = foo;
    foo = [[NSObject alloc] init];
    assert(self.test == nil);
}

Strong意味着只要此属性指向一个对象,该对象就不会自动释放。 在非ARC中,它是retain的同义词。

相反, Weak意味着属性指向的对象可以自由释放,但前提是它将属性设置为nil 在ARC中,您使用weak来确保您不拥有它指向的对象。

查看Apple文档以获取自动参考计数(ARC)

如果您没有时间阅读它:

ARC为对象和弱引用引入了几个新的生命周期限定符。 弱引用不会延长它指向的对象的生命周期,并且在没有对该对象的强引用时自动变为nil。

是默认的。 只要存在指向它的强指针,对象就会保持“活着”。

weak指定不保持引用对象存活的引用。 当没有对象的强引用时,弱引用设置为nil。

由于iOS 5 ARC自动使弱链接无效,因此在卸载对象时,其对象层次结构将自动设置为nil。 由于这个原因, Weak是所有outlet属性的推荐关系。 这些视图对象已经是视图控制器视图层次结构的一部分,不需要在其他地方保留。 声明你的网点很弱的一大优点是它可以节省你编写viewDidUnload方法的时间。

查看一个非常详细的文档,参考内存管理 它是ARC之前的版本,但它可以帮助您理解内存管理。 属性的retain关键字仍然适用于ARC,只是strong的同义词。 或者另一个特定的ARC教程

强弱之间存在以下差异。

1.如果我们声明变量强,那么它不会被编译器解除分配,直到内存中的Application实例。当我们将nil值设置为该引用时,它会被编译器解除分配,默认情况下任何局部变量都是强变量。 例如: - var str =“hello world”

如果我们设置str = nil则将其解除分配。

2.如果我们将变量声明为强,那么它将被其他实例(Class)保留,并且它将保持计数增量1。

财产薄弱。

1.当我们声明弱属性时,它只包含数据/实例地址,直到强引用在内存中,如果强大的变量引用被释放,它将自动设置为nil。

例如: - var str =“hello world”weak var stringVar = str

假设str包含200个堆地址,我们设置str = nil,然后由编译器自动将弱属性引用设置为nil。

所以这就是stoary board ref controller的原因,主视图只设置为strong而其他弱者为ex-我们可以看到UIButton,UILabel out let等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM