Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 自定义xcode模板能否部分和选择性地启用ARC(自动引用计数)?_Objective C_Shell_Plist_Xcode4.2_Automatic Ref Counting - Fatal编程技术网

Objective c 自定义xcode模板能否部分和选择性地启用ARC(自动引用计数)?

Objective c 自定义xcode模板能否部分和选择性地启用ARC(自动引用计数)?,objective-c,shell,plist,xcode4.2,automatic-ref-counting,Objective C,Shell,Plist,Xcode4.2,Automatic Ref Counting,问题:我使用的库不支持ARC(自动引用计数) 背景(对于不熟悉ARC的人): 手动解决方案:为库的每个实现文件添加-fno objc arc选项,否则在我的应用程序代码中通常使用arc 观察:可以复制以下模板文件,并很可能用于完全打开或关闭ARC(无需添加上面的编译器标志——我需要的中间解决方案): “/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS Ref

问题:我使用的库不支持ARC(自动引用计数)

背景(对于不熟悉ARC的人):

手动解决方案:为库的每个实现文件添加-fno objc arc选项,否则在我的应用程序代码中通常使用arc

观察:可以复制以下模板文件,并很可能用于完全打开或关闭ARC(无需添加上面的编译器标志——我需要的中间解决方案):

“/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS Reference Counting.xctemplate”

问题重申:有没有办法避免手动解决方案?(在-fno objc arc选项中复制和粘贴超过100次是不方便的。我希望苹果公开一个编程解决方案。我不想使用Automator.app进行复制/粘贴,因为Xcode UI很可能会发生变化。)

示例Xcode4模板生成器:


注意:template_generator.py具有实验性共享生成设置。我想要有选择地共享(部分共享)设置。此外,最好通过宏替换或提供第二个main.m文件将main()中的NSAutoreleasePool更改为@autorelease块。

您可以在“编译源”列表中选择多个文件,并通过按Enter>Paste>Enter将
-fno objc arc
标记一次应用于所有文件。

否,但是你做的很艰难。。。只需为这些MRC源创建一个静态库目标(如果还不存在——它是第三方库),然后为每个目标设置适当的构建设置。然后将库与最终可执行文件链接。

两个问题:A)库每次更改(可能经常更改)时,我不必重新格式化静态目标吗?B) 我是否仍然需要为该目标中的每个文件添加-fno objc arc,或者该选项是否可以应用于所有文件?参考的ARC版本转换说明中没有提到此配置;它们只说明必须为每个文件单独指定选项。如果您可以提供一个示例howto/教程(或链接到其中一个),并且它确实简化了打开或关闭ARC的过程,我将为您(或第一个回答者:-)提供已回答的批准符号(!)@mda a)您只需将目标配置为链接到的库,然后所有使用它的客户端/应用程序都链接到该库。他们会提到同一个目标。没有重新格式化(但有人需要添加所有要编译的源代码)。为方便起见,您使用的库可能已经提供了此静态库/项目。b) 不需要。您只需在使用MRC的库的目标级别设置标志。源代码将继承设置,除非有一个构建设置在主导级别被重写,或者如果您向编译器传递了冲突标志。我还需要支持GCC,当遇到-fno objc ARC时,它会抛出一个错误。我觉得我完全是在提炼和重复我说过的话:1)为MRC文件创建一个静态库2)如果你的Xcode版本默认添加了“Enable ARC”标志,请关闭该静态库/目标的“Enable ARC”标志3)构建并将你的应用程序链接到静态库。4) 完成了。配置静态libs有很多步骤;不过,让模板向导让程序员选择是否启用ARC是很有用的,而对“遗留”非ARC代码和模板代码本身中的现有样板文件的麻烦最小。你们都给出了很好的评论。我在实践中发现,由于GCC不支持-fno-objc-arc选项(只有Apple LLVM/clang编译器支持),arc迁移可能仍将是一个手动过程,模板可能需要一段时间才能跟上。我在不止一个项目上成功地迁移到了ARC,这并不难。它在我的XCode重构工具愿望列表中。更高级别的主持人可能会结束这个问题,除非有人想添加一个详尽的howto。是的,但如果任何标志预先存在,它们将被覆盖。不过,如果它们都是一样的,那么这就非常有效。