我对 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 方法将不再有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)