我正在读一本书,上面写着(如果我没有弄错的话)用@autoreleasepool
语句包装一些代码可以启用 ARC。首先是这样吗?
我的第二个问题是,当我在做一些 iOS 示例程序时,虽然我在创建新项目时启用了 ARC,但我从来没有看到在任何地方使用过这个指令(在自动生成的代码中)。这是否意味着没有使用ARC?任何想法/指针表示赞赏。
我正在读一本书,上面写着(如果我没有弄错的话)用@autoreleasepool
语句包装一些代码可以启用 ARC。首先是这样吗?
我的第二个问题是,当我在做一些 iOS 示例程序时,虽然我在创建新项目时启用了 ARC,但我从来没有看到在任何地方使用过这个指令(在自动生成的代码中)。这是否意味着没有使用ARC?任何想法/指针表示赞赏。
@autoreleasepool
不“启用”ARC。这只是使用自动释放池的 ARC 方式。
在 ARC 之前,您使用NSAutoreleasePool
该类来设置一个自动释放池,如下所示:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// Code benefitting from a local autorelease pool.
[pool release];
但是在使用 ARC 时不允许调用release
,因此引入了一种使用自动释放池的新方法:
@autoreleasepool {
// Code benefitting from a local autorelease pool.
}
@autoreleasepool
块比直接使用实例更有效NSAutoreleasePool
;即使您不使用 ARC,也可以使用它们。
首先,这本书是错误的。@autoreleasepool 与 ARC 正交。你可以使用没有 ARC 的自动释放池,也可以使用没有自动释放池的 ARC(但你不应该这样做)。
其次,使用任何 Xcode 的默认项目创建的项目的主线程将为您创建自动释放池池。您创建的任何线程都需要创建自己的自动释放池。
使用 @autoreleasepool 语句包装一些代码启用 ARC
否。ARC 由编译器标志启用。@autoreleasepool
只是一个用于创建自动释放池的关键字,即使您使用的是 ARC(因为通常您会分别使用 alloc-init 和 release 创建和销毁它们,但是您不能release
在 ARC 下发送显式消息 - 这就是为什么这个关键字有已介绍。)
如果你在 Xcode/使用编译器/等启用 ARC,它就会被启用。当然,有比“自动释放一切”原则更好的解决方案,这可能是您在示例代码中没有遇到这个关键字的原因。
我的第二个问题是,当我在做一些 iOS 示例程序时,虽然我在创建新项目时启用了 ARC,但我从来没有看到在任何地方使用过这个指令(在自动生成的代码中)。这是否意味着没有使用ARC?任何想法/指针表示赞赏。
您的应用程序确实使用了它。查看项目中的main.m文件。你会在那里找到它。