这是基本的内存管理代码。我正在处理未实现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会减少。