我是IOS开发新手,我已经开始学习客观的c程序对IOS 7,并且据我所知,由于自动引用,比以前更容易编写代码数数。有几件我不明白的事情。在MAIN方法中,我们有autoreleasepool块,所以我的第一个问题是,为了启用ARC,代码必须位于此块内?如果不是,那么autoreleasepool内部的代码和其他代码之间的区别是什么?关于ARC的困惑,自动发布
我的第二个问题是,当我正在编写我的IPHONE程序时,我有一堆类和非那些代码都在“autoreleasepool”里面,只有MAIN方法中的代码。
int main(int argc, char * argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil,
NSStringFromClass([HomepwnerAppDelegate class]));
}
}
所以,这是否意味着这个块以某种方式奇迹般地被应用到同一程序的任何其他类中的所有代码行?
我的最后一个问题是,不管是用ARC还是没有它,如果我们在方法内部有一个声明的指针变量,当方法返回/退出时,对象是否被释放/销毁?
假设我们有这样的方法:
- (void)doSomething {
NSMutableArray *allItems = [[NSMutableArray alloc] init];
NSString *myString = @"sample string";
[allItems addObject:myString]
}
那么当我们调用这个方法,它退出时,会发生什么样的方法内定义的那些局部变量?如果我们使用ARC,结果有没有什么不同? (对象仍然在内存或没有)
感谢您的回复。只有一个问题仍然存在,如果ARC完成这项工作,那么拥有“autoreleasepool”的意义何在? –
@aligh:ARC插入调用来保留,释放和自动释放,所以你不必这样做,但这些方法仍然是一如既往 - 你只是不是那个叫他们的人。即使编译器是编写调用的编译器,autorelease仍然会将对象放入自动释放池中,因此仍然需要有一个自动释放池供自动释放对象使用。 – Chuck
非常感谢。您介意查看另一个问题,我询问了有关以下链接中的UINavigationController属性的问题吗? http://stackoverflow.com/questions/20572690/navigationcontroller-property-is-declared-in-uinavigationcontroller-h-but-is-a-p –