这是基本的内存管理代码。我正在处理未实现ARC的旧应用程序。

我的问题:将实例变量添加到视图并释放它之后可以访问实例变量吗?

在我看来,调用实例变量之后访问实例变量可能不正确,但是任何人都可以建议吗?

demoView = [[DemoView alloc] initWithFrame:[self demoRect:newType]];
[self addSubview:demoView]
[demoView release];


稍后在代码中访问它:

[demoView setBackgroundColor:[UIColor whiteColor]];
demoView.title = @"something";


对象稍后释放,如下所示:

[demoView removeFromSuperview];
demoView = nil;

最佳答案

调用此行时,demoView的retainCount为1。

demoView = [[DemoView alloc] initWithFrame:[self demoRect:newType]];


在这行之后

[self addSubview:demoView]


keepCount增加到2。

如果不执行其他任何操作,但demoView稍后在dealloc中释放或刚刚被删除,则其keepCount仍为1。
这就是为什么开发人员称

[demoView release];


将keepCount保持为1。

附言
在较早的保留/发布范式中,您将必须保留keepCount并对其进行检查。在分配,添加到UIView/NSArray/NSDictionary以及调用retain时,retainCount会增加
当您调用release从UIView/NSArray/NSDictionary中删除​​时,retainCount会减少。

10-08 15:32