gpt4 book ai didi

Objective-C 自动释放池不释放对象

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:11 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com