IOS开发的一些好的建议和小技术
iOS开发Tips
发布者: Seven's - 2011/12/01 - 分类:iOS开发
Xcode 常用编译选项设置
在xcconfig文件中指定即可。
用标准库连接
Info.plist 输出编码
- None: 不做优化使用这个设置,编译器的目标是减少编译成本,使调试产生预期的结果。
- Fast:优化编译将为大函数占用更多的时间和内存使用这个设置,编译器将尝试减少代码的大小和执行时间,不进行任何优化,需要大量编译时间。
- Faster:编译器执行几乎所有支持的优化,它不考虑空间和速度之间的平衡与“Fast”设置相比,该设置会增加编译时间和生成代码的性能。编译器不进行循环展开、内联函数和寄存器变量的重命名。
- Fastest:开启“Faster”支持的所有的优化,同时也开启内联函数和寄存器变量的重命名选项
- Fastest,smallest:优化代码大小这个设置启用“Faster”所有的优化,一般不增加代码大小,它还执行旨在减小代码大小的进一步优化。
- int a[ 2 ][ 2 ] = { 0, 1, 2, 3 };
- int b[ 2 ][ 2 ] = { { 0, 1 }, { 2, 3 } };
不匹配的返回类型
- {
- if( a )
- if( b )
- foo();
- else
- bar();
- }
- {
- if( a )
- {
- if( b )
- foo();
- else
- bar();
- }
- }
在结构体初始化时缺少字段
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES
iphone 常用的<app>-info.plist设置
用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
1
2
|
UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone
|
或者
1 |
[[[UIDevice currentDevice] model] isEqualToString:@ "iPad" ];
|
判断设备是否有摄像头
1 |
[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
|
转载于:https://blog.51cto.com/derkin2jessie/1151533
IOS开发的一些好的建议和小技术相关推荐
- iOS开发UI篇—实现一个私人通讯录小应用(一)
iOS开发UI篇-实现一个私人通讯录小应用(一) 一.该部分主要完成内容 1.界面搭建 2.功能说明 (1).只有当账号和密码输入框都有值的时候,登录按钮 ...
- IOS开发控制器之间传值的几种小方法
在IOS开发中或面试中,经常会遇到,两个或者多个控制器之间传值的问题 ,总结的集中方法仅供参考! 问题 :将B控制器中的textField 输入内容,传到A控制器中的label上显示出来,如何传值? ...
- iOS开发学无止境 - NSFileManager文件操作的十个小功能
(配图的小故事还记得嘛) NSFileManager是一个单列类,也是一个文件管理器.可以通过NSFileManager创建文件夹.创建文件.写文件.读文件内容等等基本功能. 下面将介绍NSFileM ...
- iOS开发UI篇—实现一个私人通讯录小应用(二)
一.实现功能说明 (1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作. 注意:注销按钮的单击事件已经进行了连线.实现-(void)actionSh ...
- Mac和iOS开发资源汇总—更新于2013-10-14
From:http://beyondvincent.com/blog/2013/07/18/106/ 1U55JG9-0 小引 本文主要汇集一些苹果开发的资源,会经常更新,建议大家把这篇文章单独收藏( ...
- iOS开发- ios学习资源(持续更新)
mark一些自己在学习过程中收集的资源.免得需要的时候没地方找. 持续更新.(最新更新时间: 2014.4.4) 1.苹果官方文档 构建iOS程序:下面的这篇文章介绍了 iOS 程序开发的过程: St ...
- iOS 开发资源汇总 肯定有你想要的资源(Continuously updated)
##写在文前 为什么还要重复造轮子? 我相信在看到这篇文章之前,大家肯定找到了很多iOS资源收集,自学资源,精品资源,开源项目收集,大牛Blog集合等等. 这类文章实在太多太多了,并且也广泛得到大家的 ...
- 文顶顶iOS开发博客链接整理及部分项目源代码下载
网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程却很难找.如果你是初学者,在学习了斯坦福iOS7公开课 ...
- Mac和ios开发资源汇总
目录 1.苹果官方文档 2.邮件列表 3.论坛 4.网站 5.博客 6.大会 7.播客和录像 正文 1.苹果官方文档 构建iOS程序:下面的这篇文章介绍了 iOS 程序开发的过程: Start Dev ...
最新文章
- 美国版“非升即走”瞄准终身教授,2年评审不通过就减薪撤职,其他高校开始抢人...
- The server time zone value is unrecognized or repr
- 调度策略的测试方法及其自动化
- Example3_3(if-else语句)
- 【深入理解JVM】ClassLoader类加载机制
- 设计模式——享元模式具体解释
- CSS3中的display:grid网格布局介绍
- 字符串数组判断数字,字母汉字,
- countif函数比较两列不同_VLOOKUP函数批量查找,这么长的公式你可以写出来,立马加薪...
- 拓扑量子计算机 超导 光,科学家发现新型拓扑超导材料 有望推动实现拓扑量子计算...
- 菜鸟学Linux 第055篇笔记 php基础
- Android apk签名详解——AS签名、获取签名信息、系统签名、命令行签名
- Audio专业名词解析
- Dw如何创建网页链接?
- 其实,我几乎很少看书!
- java rmi 推送_java 企业微信推送消息 示例源码
- P2150 [NOI2015]寿司晚宴
- Windows安装Git cz (commitizen)
- 学习ARM开发01-09
- 短视频软件开发——平台同质化如何破局
热门文章
- linux远程复制文件命令小总结
- 在线字符串哈希/散列加密工具
- Excel用图标集展示数据
- 【Spark Summit EU 2016】Glint: Spark的异步参数服务器
- Android 学习--ListView 的使用(一)
- win764bit下Eclipse连接ubuntu中hadoop2.6经验总结
- va_start和va_end的使用及原理
- javac -version ;java -version不一致
- c++ builder groupbox修改样式_Pandas也能修改样式?快速给你的数据换个Style!
- java肝癌晚期_生信分析43.肿瘤浸润免疫与肝癌(HCCDB+oncomine)