iOS开发——iOS进阶

原创 2016年06月01日 21:27:13
  1. 少导入头文件。
    尽量不要在头文件引入其它的头文件,如果需要用到实例,则用@class导入,可防止循环引用,并且不需要编译到头文件的全部信息,减少编译时间。
  2. 多用字面量语法,少用与之等价的方法。
    如使用NSString *string=@”a”;代替NSString *string=[[NSString alloc] initWithString:@”a”]; 使用NSArray *array=@[@”a”,@”b”];代替NSArray *array=[NSArray arrayWithObjects:@”a”,@”b”, nil];这样可以使语法更加清晰。
  3. 在对象内部读取或写入对象。
    在对象内部读取数据时,应该直接通过实例变量来读,如:return [NSString stringWithFormat:@”%@”, _name]; 在写入数据时,应该通过属性来写,如:self.name=@”aa”;
  4. 通知。
    在注册一个通知前,最好先注销一下此通知,防止数据处理后忘记注销或有同名的通知时发生混乱
  5. 局部刷新。
    使用tableView时,如果不需要全部刷新,最好使用局部刷新,可减少cpu的损耗。刷新某行:NSIndexPath *te=[NSIndexPath indexPathForRow:1 inSection:2]; [mainTV reloadRowsAtIndexPaths:[NSArray arrayWithObjects:te,nil] withRowAnimation:UITableViewRowAnimationNone];
    刷新某section:NSIndexSet * nd=[[NSIndexSet alloc]initWithIndex:1];
    [tview reloadSections:nd withRowAnimation:UITableViewRowAnimationAutomatic];
  6. 时间器。
    创建时间器的时候,在退出本页面的栈堆之前把时间器关掉,节省cpu。当一个页面里需要创建多个时间器,并且是执行相同的方法时,在创建之前先把时间器关掉,否则会出现数据多次获取的情况,尽管你用的时间器是一个全局变量,并且每次创建都是新建,原来的时间器也不会销毁的。
  7. 自动释放池。
    在ARC语法中,使用@autoreleasepool {}自动释放池可避免内存峰值。因为在自动释放池中,自动释放池会把里面的临时变量放到本池中,而不用放到主池中,每次循环后,自动释放池会把池内的变量清空,然后再创建自动释放池,这样还可以避免已经释放的对象被再次使用。但是也不要乱添加,要测试一下,确实需要避免内存峰值时再创建,因为就算自动释放池的消耗很低,但还是存在的。
  8. 调试内存管理问题(有时崩,有时不崩的情况)
    Product->Screem-Edit Screem->Run->Diagnostics->Enable Zombie Objects调出僵尸对象进行调试
  9. 快速枚举
    遍历数组时,使用快速枚举for(id obj in array){};
    如果需要知道下标,则使用基于块的快速枚举[indexArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    //dosomething with obj and idx
    if(){//符合条件时停止,相当于break
    *stop=YES;
    }
    }];
    遍历字典时,使用基于块的快速枚举,可以同时获得key和value
    [dic enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
    // dosomething with key and obj

    if(){//符合条件时停止,相当于break
    
        *stop=YES;
    }
    

    }];
    如果知道了具体类型,则可使用具体的oc类型代替id类型。

  10. 延迟加载或添加
    使用scrollview时,当不需要显示的页面和数据,可使用延迟加载,在即将需要使用的时候才加载,而不是一开始就全部加载。在做一些需要点击某个按钮后才会出现的页面,也使用延迟加载,在点击的时候才布局,当然不是每次都新建,而是判断为nil时新建,不为nil时显示。

  11. 当你需要点击self.view收起键盘时,不需要为self.view添加一个单击手势,然后再在手势方法里面一个个地resignFirstResponder了,只需要用到控制器自带的一个方法即可

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
}
  1. 待续……….
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

iOS开发之高级视图—— UINavigationController(二)简单导航功能进阶

上一个例子实现了UINavigationController的简单导航功能,现在结合UITableView把这个功能进一步加强。         AppDelegate.m // // AppDel...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)