在 MRC 下的 Objective-C 中,如果一个对象被取消分配,它创建的对象也会被取消分配吗?
In Objective-C under MRC if an object gets de-alloced do objects it created get de-allocated as well?
这可能看起来像 this 的复制品,但我认为这并不能回答我的问题,因为它是关于关联对象的,而不是关于对象创建的并且其唯一指针驻留在对象内的对象。
假设我在 MRC 模式下有这个例子。
// In h file
@interface MyViewController : UIViewController {
NSObject* myNsObject;
}
// In m file
-(void) viewDidLoad() {
myNsObject = [[NSObject alloc] init]; // I'm never going to release myNsObject
}
我很聪明,可以正确释放 myViewController。它的引用计数变为零并被取消分配。但是我从来没有释放过 myNsObject,所以它一直挂在引用计数为 1 的位置。因此,是否会在 myNsObject 上自动完成释放并因此取消分配?或者在那种情况下 myNsObject 会泄露吗?
这里正确的内存管理是在视图控制器的dealloc
方法中释放myNsObject
:
- (void)dealloc {
[myNsObject release];
[super dealloc];
}
如果您创建了一些东西,那么您有责任发布它(在 MRC 下)。
如果不这样做会导致内存泄漏。
这可能看起来像 this 的复制品,但我认为这并不能回答我的问题,因为它是关于关联对象的,而不是关于对象创建的并且其唯一指针驻留在对象内的对象。
假设我在 MRC 模式下有这个例子。
// In h file
@interface MyViewController : UIViewController {
NSObject* myNsObject;
}
// In m file
-(void) viewDidLoad() {
myNsObject = [[NSObject alloc] init]; // I'm never going to release myNsObject
}
我很聪明,可以正确释放 myViewController。它的引用计数变为零并被取消分配。但是我从来没有释放过 myNsObject,所以它一直挂在引用计数为 1 的位置。因此,是否会在 myNsObject 上自动完成释放并因此取消分配?或者在那种情况下 myNsObject 会泄露吗?
这里正确的内存管理是在视图控制器的dealloc
方法中释放myNsObject
:
- (void)dealloc {
[myNsObject release];
[super dealloc];
}
如果您创建了一些东西,那么您有责任发布它(在 MRC 下)。
如果不这样做会导致内存泄漏。