Xcode 经常使用编译选项设置html
在xcconfig文件中指定便可。web
用标准库链接数组
LINK_WITH_STANDARD_LIBRARIES = YES若是激活此设置,那么编译器在连接过程当中会自动使用经过标准库的连接器。
session
Info.plist 输出编码app
INFOPLIST_OUTPUT_FORMAT = binary指定Info.plist文件的输出编码(默认状况下,输出与输入的编码保持不变),这个输出编码能指定“binary”或者“XML”。
生 成调试符号GCC_GENERATE_DEBUGGING_SYMBOLS = NO当启用的时候,详情等级可以经过build的’Level of Debug Symbols’设置去控制。 隐藏内联方法GCC_INLINES_ARE_PRIVATE_EXTERN = YES Objective-C GCGCC_ENABLE_OBJC_GC = Unsupported 优化级别GCC_OPTIMIZATION_LEVEL = Fastest, Smallest [-OS]iphone
C 语言方言GCC_C_LANGUAGE_STANDARD = C89 警告 检查Switch语句GCC_WARN_CHECK_SWITCH_STATEMENTS = YES 隐藏局部变量GCC_WARN_SHADOW = YES 隐式转换成32位的类型GCC_WARN_64_TO_32_BIT_CONVERSION = YES 未完成的Objective-C协议GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES 抑制全部的警告GCC_WARN_INHIBIT_ALL_WARNINGS = NO 初始化时没有完整的括号GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES例子(a没有彻底的括号,b有): ide
不匹配的返回类型函数
GCC_WARN_ABOUT_RETURN_TYPE = YES 缺乏括号GCC_WARN_MISSING_PARENTHESES = YES例子:性能
在结构体初始化时缺乏字段
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES优化
缺 少函数原型GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES 在文件结尾缺乏新行GCC_WARN_ABOUT_MISSING_NEWLINE = YES 选择了多个定义的类型(@Selector)GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO 严格的Selector匹配GCC_WARN_STRICT_SELECTOR_MATCH = YES 把缺乏函数原型看成错误GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES 把全部的警告看成错误GCC_TREAT_WARNINGS_AS_ERRORS = YES 未定义的SelectorGCC_WARN_UNDECLARED_SELECTOR = YES 未初始化的自动变量GCC_WARN_UNINITIALIZED_AUTOS = YES 未知的Pragma指令GCC_WARN_UNKNOWN_PRAGMAS = YES 未使用的函数GCC_WARN_UNUSED_FUNCTION = YES 未使用的标签GCC_WARN_UNUSED_LABEL = YES 未使用的参数GCC_WARN_UNUSED_PARAMETER = YES 未使用的值GCC_WARN_UNUSED_VALUE = YES当一个语句计算的结果显式的未使用的时候发出警告 未使用的变量GCC_WARN_UNUSED_VARIABLE = YES 警告-全部过期的函数GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES offsetof宏未定义使用的警告GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = YES
iphone 经常使用的<app>-info.plist设置
Application requires iPhone environment如 果应用程序不能在ipod touch上运行,设置此项为true;
Application uses Wi-Fi若是应用程序须要wi-fi才能工做,应该将此属性设置为true。这么作会提示用户,若是没有打开wi-fi的话,打开wi-fi。为了节省 电力,iphone会在30分钟后自动关闭应用程序中的任何wi-fi。设置这一个属性能够防止这种状况的发生,而且保持链接处于活动状态
Bundle display name这用于设置应用程序的名称,它显示在iphone屏幕的图标下方。应用程序名称限制在10-12个字符,若是超出,iphone将缩写名 称。
Bundle identifier这个为应用程序在iphone developer program portal web站点上设置的惟一标识符。(就是你安装证书的时候,须要把这里对应修改)。
Bundle version这个会设置应用程序版本号,每次部署应用程序的一个新版本时,将会增长这个编号,在app store用的。
Icon already includes gloss and bevel effects默认状况下,应用程序被设置了玻璃效果,把这个设置为true能够阻止这么作。
Icon file(这个不用多说了)设置应用程序图标的。
Main nib file base name应用程序首次启动时载入的xib文件 这个基本用不到。
Initial interface orientation 肯定了应用程序以风景模式仍是任务模式启动
Localizations多语言。应用程序本地化的一列表,期间用逗号隔开,例如 应用程序支持英语 日语,将会适用 English,Japanese. Status bar is initially hidden 设置是否隐藏状态栏。你懂的。
Status bar style选择三种不一样格式种的一种。
URL types应用程序支持的url标识符的一个数组。
用URL Scheme进行程序跳转
打开info.plist,添加一项URL types
展开URL types,再展开Item1,将Item1下的URL identifier修改成URL Scheme
展开URL Scheme,将Item1的内容修改成myapp
其余程序可经过myapp://访问此自定义URL
参考:http://iphonedevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html
IOS后台播放音乐
OS后台播放只是在IOS4.0之后的版本支持。
1,设置后台播放会话
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
2,在info.plist里面添加
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
静态库无法包含category/分类?
若是你导入一个objc静态库,发现不少objc的category 不能调用,能够尝试在主工程中加入linker选项:
-all_load 加入这个通常就够了
-ObjC
让程序最小化再开启时,从头开始:
按下 “Home” 键之后程序可能并无退出而是转入了后台运行。若是您想让应用直接退出,最简单的方法是:在 info-plist 里面找到 Application does not run in background 一项,勾选便可。
程序退出后任务栏仍是有图标,可是程序原来的全部运行状态所有丢失,点击任务栏图标也不过至关于再次启动程序;若是容许后台运行,点击任务栏图标后会恢复程序中断时的界面。
本地化字符串:
在infoPlist.strings里面写
“string1″=”水果”
代码里面写 myLabel.text = NSLocalizedString(@”string1″, nil);
本地化的Bundle display name:
1)建立一个空文件,取名为InfoPlist.strings
2)对InfoPlist.strings进行本地化(Get Info -> Make Localization),而后设置须要的语言(如中文zh)
3)编辑不一样的InfoPlist.strings文件,设置显示名字
CFBundleDisplayName = “名字”;
4)(这步不作貌似也能够)编辑Info.plist,添加一个新的属性Application has localized display name, 设置其类型为boolean,并将其value设置为选中状态
default图片的衔接问题:
程序开始后,手动加载default图片,而后进行过渡效果便可。
遍历目录:
NSString *appDocDir = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] relativePath];NSArray *contentOfFolder = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:appDocDir error:NULL];for (NSString *aPath in contentOfFolder) { NSLog(@"apath: %@", aPath); NSString * fullPath = [appDocDir stringByAppendingPathComponent:aPath]; BOOL isDir; if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDir] && !isDir) { [fileList addObject:aPath]; }}
IB:
不论写不写property的retain,由IBOutlet都会为对象加一个retainCount,因此只要链接了,就须要在viewDidUnload与dealloc中release并适当置为nil。
预先在IB里面加载好的文件(好比图片),即便释放了Controller,IB中的文件也不会被释放,直至内存警告,解决办法是较大的资源用代码加载。
UIWebView:
用代码加载UIWebView的内容,navigationType是UIWebViewNavigationTypeOther
CAAnimation:
必定要记得[self.view.layer removeAllAnimations];由于CAAnimation会retain它的delegate
设备型号识别,可经过审核:
+ (NSString*)getDeviceVersion{ size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *machine = (char*)malloc(size); sysctlbyname("hw.machine", machine, &size, NULL, 0); NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding]; free(machine); return platform;}
输出:
//@”iPad1,1″
//@”iPad2,1″
//@”i386″
逗号后面数字解释:(i386是指模拟器)
1-WiFi版
2-GSM/WCDMA 3G版
3-CDMA版
AppleTV(2G) (AppleTV2,1)
iPad (iPad1,1)
iPad2,1 (iPad2,1)Wifi版
iPad2,2 (iPad2,2)GSM3G版
iPad2,3 (iPad2,3)CDMA3G版
iPhone (iPhone1,1)
iPhone3G (iPhone1,2)
iPhone3GS (iPhone2,1)
iPhone4 (iPhone3,1)
iPhone4(vz) (iPhone3,3)iPhone4 CDMA版
iPhone4S (iPhone4,1)
iPodTouch(1G) (iPod1,1)
iPodTouch(2G) (iPod2,1)
iPodTouch(3G) (iPod3,1)
iPodTouch(4G) (iPod4,1)
判断ipad/iphone
12UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPadUI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone
或者
1[[[UIDevice currentDevice] model] isEqualToString:@"iPad"];
判断设备是否有摄像头
1[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];