1.UIApplication 设置联网指示器的可见性和隐藏性(可以在状态栏处做一些数据请求的用户优化体验)具体方法如下:
//获取 UIApplication 的单例
UIApplication *app=[UIApplication sharedApplication];
//在请求数据的时候可以设置联网指示器打开
app.networkActivityIndicatorVisible=YES;
//模拟在请求数据完成(成功或失败)之后关闭联网指示器
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
app.networkActivityIndicatorVisible=NO;
});
//设置应用程序图标右上角的红色提醒数字
UIApplication *app = [UIApplication sharedApplication];
app.applicationIconBadgeNumber = 10;
// 创建通知对象
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
// 注册用户通知
[app registerUserNotificationSettings:setting];
注:苹果为了增强用户体验,在iOS8以后我们需要创建通知才能实现图标右上角提醒,iOS8之前直接设置applicationIconBadgeNumber的值即可。(注意要在使用的时候要考虑到程序的兼容性,如果要兼容iOS8 就判断写两种情况的代码)
//阻止屏幕变暗,慎重使用本功能,因为非常耗电。
UIApplication *app = [UIApplication sharedApplication];
app.idleTimerDisabled =YES;
2.怎样检查程序代码里,那些吃饭不干活的类文件。(占用程序的内存,但是我们整个程序流程又不用的类)为了给APP提速,需要定期清理不用的类。
推荐大家使用fui(Find Unused Imports)是开源项目能很好的分析出不再使用的类,准确率非常高,唯一的问题是它处理不了动态库和静态库里提供的类,也处理不了C++的类模板。
//安装 fui 工具 在终端中执行命令
(1)sudo gem install fui -n /usr/local/bin
(fui usage: https://github.com/dblock/fui)这一步好像不用做,因为我在执行这个命令的时候,报错了,但是不影响后面的 fui find命令的。
(2)到工程目录下,执行 fui find 命令,可以找出所有的没有用到的class文件
执行完(1)步骤后。就可以找一个项目工程进行 fui find 命令测试了。也就是(2)步执行。
总结:但是,这毕竟是工具。当我们在pch 文件里添加类的头文件的时候,如果某个类的头文件注释掉了是检测不到的。
3.app性能优化方案
一般来说,我们放到didFinishLaunchingWithOptions执行的代码,有很多初始化操作,如日志,统计,SDK配置等。尽量做到只放必需的,其他的可以延迟到MainViewController展示完成viewDidAppear以后。
- 日志、统计等必须在 APP 一启动就最先配置的事件
- 项目配置、环境配置、用户信息的初始化 、推送、IM等事件
- 其他 SDK 和配置事件
第一类,必须第一时间启动,仍然把它留在 didFinishLaunchingWithOptions 里启动。
第二类,这些功能在用户进入 APP 主体的之前是必须要加载完的,我把他放到广告页面的viewDidAppear启动。
第三类,由于启动时间不是必须的,所以我们可以放在第一个界面的 viewDidAppear 方法里,这里完全不会影响到启动时间。
4.断言(NSAssert)的使用
int a = 1;
NSCAssert(a == 2, @"a must equal to 2");
//第一个参数是条件,如果第一个参数不满足条件,就会记录并打印后面的字符串
运行则会崩溃并在控制台输出信息如下:
*** Assertion failure in -[ViewController viewDidLoad](), /Users/yinwentao/Desktop/MYAssert/MYAssert/ViewController.m:32
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'a must equal to 2'
5.NSCache 苹果的缓存机制类
可以设置缓存的数量和缓存的成本,可以删除缓存的数据操作。当程序收到内存警告的时候,系统是不会在给NSCache添加数据啦。这是,我们需要程序退出后台,重新打开,就可以进行缓存数据啦。
6.iOS图片缓存框架除啦 必备的SDwebimage 还有我们熟悉的 UIKit + AFNetworking
7.cookie 机制 用于用户登陆的验证操作 (加拉一个有效期,一般银行项目和金融类的项目使用“暂时”登陆机制,还有和web请求的时候验证用户身份和时效性)。
8.iOS定位获取地理位置反编译的时候,多次调用代理方法 didupdatelocations 执行多次,解决的方法是:在代理方法:
(void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray<CLLocation *> *)locations {
[manager stopUpdatingLocation];
// 将代理对象置为空,防止多次调用
manager.delegate = nil;
CLLocation *lastLocation = [locations lastObject];
}
定位成功之后,将代理对象置为空,如果没有委托引用:代理对象无法find您的didUpdateLocations方法
******开始定位时,将manager的代理对象重置
來源链接 https://www.jianshu.com/p/22e12a345bda









网友评论