既然有ARC就需要使用retain

时间:2013-12-12 19:38:03

标签: ios iphone objective-c

我相信ARC会处理所有内存管理问题,是否有理由使用retain。现在有理由使用assign吗?

我试图查看一些文档,但找不到任何内容

如果我们不再需要这些东西,那么在创建它们时我们应该分配什么属性?我们应该把一切都变得强大吗?

3 个答案:

答案 0 :(得分:2)

如果您正在使用ARC,则应将您的媒体资源设为weakstrong。你应该使用weak,如果你希望该属性存在,只要其他一些对象指向该属性,如果你希望该属性存在,只要你(自己)指向它就应该使用strong

例如,当你的对象有一个指向故事板或xib中的UIView的指针(通过控制点击并拖动到你的界面创建)时,它将是一个弱指针,因为你希望UIView只存在于故事板或xib允许它存在。更清楚的是,故事板或xib拥有该对象。

使用ARC retainstrong

相同

答案 1 :(得分:0)

好吧,因为它不允许我在我上面提出答案。我会回答同样的问题。由于现在在设置属性列表时必须使用arc,因此弱标签和强标签代替了保留功能。我通常会在单个视图应用程序中将所有内容设置为强大,然后当我使用多视图或桌面应用程序时,我使用的是弱。

答案 2 :(得分:0)

是的,在许多情况下,您希望覆盖默认的ARC行为。

Eg: 

@property(nonatomic,retain)NSString *response;

-(void)parseHTTRResponse {

//responseString is an autoreleased object but assignment will increase retain count by 1
self.response =[self stringFromData:response.data];

// equivalent to first statement
__strong NSString *responseString = [self stringFromData:response.data];

}

现在问题是为什么会有人这样做?

增加局部变量的自动释放寿命,这需要很长时间(通常是NSURLConnection的对象)