4

因为强和弱属性是 iOS 5 中的新特性。如果有人告诉我什么时候使用哪个属性。

什么时候应该使用strong,什么时候应该使用weak?

@property(nonatomic,strong)

@property(nonatomic,weak)
4

4 回答 4

3

查看有关自动引用计数 (ARC)的 Apple 文档

如果你没有时间阅读它:

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

是默认值。只要有一个指向它的强指针,一个对象就保持“活动”。

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

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

查看有关内存管理的非常详细的文档。它在 ARC 之前,但它会帮助您了解内存管理。属性的 retain 关键字仍然适用于 ARC,并且只是 strong 的同义词。或另一个特定的ARC 教程

于 2012-08-20T08:12:36.270 回答
2

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);
}
于 2012-08-20T07:26:22.827 回答
2

Strong意思是只要这个属性指向一个对象,那个对象就不会被自动释放。在非 ARC 中,它是retain.

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

于 2012-08-20T07:27:33.603 回答
0

强弱之间有以下区别。

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

如果我们设置 str = nil 那么它就会被释放。

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

弱属性。

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

例如:- var str = "hello world" 弱 var stringVar = str

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

所以这就是在 stoary board ref 控制器中的原因,主视图只设置为强而其他是弱的,例如我们可以看到 UIButton、UILabel 等

于 2017-12-11T08:46:57.503 回答