我是 Objective-C 的新手,正在阅读内存管理。我试图尝试使用 NSAutoreleasePool,但不知何故它不会释放我的对象。
我有一个带有 setter 和 getter 的类,它基本上设置了一个 NSString *name。释放池后,我尝试 NSLog 对象,它仍然有效,但我想它不应该?
@interface TestClass : NSObject
{
NSString *name;
}
- (void) setName: (NSString *) string;
- (NSString *) name;
@end
@implementation TestClass
- (void) setName: (NSString *) string
{
name = string;
}
- (NSString *) name
{
return name;
}
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
TestClass *var = [[TestClass alloc] init];
[var setName:@"Chris"];
[var autorelease];
[pool release];
// This should not be possible?
NSLog(@"%@",[var name]);
return 0;
}
最佳答案
当您释放指针 var 时,您是在告诉操作系统它指向的内存可以重新分配。该指针仍然指向该内存,并且在它被重新分配之前它仍然包含您的对象的剩余部分。一旦它被重新分配,尝试调用 name 方法将不再有效。
关于Objective-C 自动释放池不释放对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2788510/