ios编译的一些细节

一、使用arc必须用LLVM3.0,LLVM3.0多了一个给力的新东西,叫Automatic Reference Counting。开启这个选项之后,LLVM会在编译阶段自动帮开发者完成“手动”的内存管理。同时,所有代码中的retain,release和autorelease会被标记成错误,也就是说,我们完全不需要用以前头蛋俱疼的方式管理内存了。  ARC不仅可以修复错误,还能增强性能。根据WWDC 2011大会的介绍,retain/release快了2.5倍,@autoreleasepool快了6倍,objc_msgSend快了33%。不需要arc的文件,加入“-fno-objc-arc”编译选项即可。


二、不用arc时,编译器用gcc或llvm3.0都可


三、引入了c++静态库,相关使用静态库的.m文件都要改为.mm文件,包括appdelegate.m和main.m


四、不要忘记配置header search paths


五、如果引入的静态库中有category,在Other linker flag中加入-ObjC和-all_load


-all_load Loads all members of static archive libraries.

-ObjC Loads all members of static archive libraries that implement an Objective-C class or category.

-force_load (path_to_archive) Loads all members of the specified static archive library. Note: -all_load forces all members of all archives to be loaded. This option allows you to target a specific archive.

翻译过来就是-all_load就是会加载静态库文件中的所有成员,-ObjC就是会加载静态库文件中实现一个类或者分类的所有成员,-force_load(包的路径)就是会加载指定路径的静态库文件中的所有成员。所以对于使用runtime时候的反射调用的方法应该使用这三个中的一个进行link,以保证所有的类都可以加载到内存中供程序动态调用

你可能感兴趣的:(ios,header,search,reference,编译器)