ssg*_*reg 1 memory objective-c automatic-ref-counting
ARC已启用.为什么'dealloc'方法不调用?我应该在这里使用@autoreleasepool吗?为什么?谢谢.
@interface Test : NSObject
@end
@implementation Test
+(id)testFromNothing
{
id res = [Test alloc];
return res;
}
-(void)dealloc
{
NSLog(@"deallocated");
}
@end
int main(int argc, const char * argv[])
{
Test* test = [Test testFromNothing];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是的,您应该使用自动释放池main.另一个问题是你没有初始化你的对象testFromNothing.
原因:您应该在输入线程的任何地方创建自动释放池(包括主线程).当然,如果该线程只使用C代码,那么不会自动释放objc对象,因此在这些场景中不需要.
关于"为什么?" - ARC还使用自动释放,并期望自动释放池始终存在.程序需要正确支持自动释放语义,因为ARC还假设它可能使用自动释放池,程序员有责任正确设置自动释放池(在某些情况下).ARC与GC不同,与MRC非常相似,涉及引用计数操作和引用计数操作发生的顺序.使用GC,可以使用几种收集方案(例如,您可以在收集之前看到大量增长,或者可以在辅助线程上进行收集),但ARC的操作类似于结构良好的保留/释放/自动释放操作 - 加上一些技巧/扩展.
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |