目标C:保留vs分配 - 重新访问

msh*_*ban 1 iphone objective-c

我想知道分配一个具有保留属性的对象,类似于:

RootViewController *viewController;

@property (nonatomic, retain) RootViewController *viewController;


@implementation ...

viewController = [[RootViewController alloc] init];
Run Code Online (Sandbox Code Playgroud)

因为做这样的事情是不对的:

self.viewController = [[RootViewController alloc] init];
Run Code Online (Sandbox Code Playgroud)

因为这会使对象保留计数增加2,你必须释放你的对象两次,其中一个是dealloc方法.

如果我正在分配我的对象,那么使用assign属性会更好吗?或何时需要保留我使用alloc方法分配的对象.

我对这个问题非常困惑,所以请你向我举例说明这种情况是如何有效的.

非常感谢,我真的很感激.

问候,

gra*_*rks 7

当您将对象传递到您希望控制它的其他位置时,它的标准做法autorelease是:

self.viewController = [[[RootViewController alloc] init] autorelease];
Run Code Online (Sandbox Code Playgroud)

或者你可以release在设置变量后自己动手:

RootViewController *controller=[[RootViewController alloc] init];
self.viewController = controller;
[controller release];
Run Code Online (Sandbox Code Playgroud)

你的第一个例子不一定是不好的做法,虽然肯定有程序员相信它.这在很大程度上取决于背景.

assign在这种情况下使用可能是错误的.

  • 好答案.`assign`将是完全错误的.值得注意的是,如果稍后通过`self.viewController = someOther;`重置该值,则*如果属性为`assign`,则*将不是所有权转移. (2认同)