tips

作者: darling323 | 来源:发表于2017-08-13 11:13 被阅读12次

    1.建议书写枚举模仿苹果——在列出枚举内容的同时绑定了枚举数据类型NSUInteger,这样带来的好处是增强的类型检查和更好的代码可读性,示例:
    // 不推荐写法
    typedef enum{
    UIControlStateNormal = 0,
    UIControlStateHighlighted = 1 << 0,
    UIControlStateDisabled = 1 << 1,
    } UIControlState;
    // 推荐写法
    typedef NS_OPTIONS(NSUInteger, UIControlState) {
    UIControlStateNormal = 0,
    UIControlStateHighlighted = 1 << 0,
    UIControlStateDisabled = 1 << 1,
    };

    2.建议加载xib,xib名称用NSStringFromClass(),避免书写错误
    // 推荐写法
    [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([DXRecommendTagVCell class]) bundle:nil] forCellReuseIdentifier:ID];
    // 不推荐写法
    [self.tableView registerNib:[UINib nibWithNibName:@"DXRecommendTagVCell" bundle:nil] forCellReuseIdentifier:ID];

    3.如果控制器已经加载过,就不用再次加载,优化性能
    if (vc.isViewLoaded) return;

    4.判断if书写方式
    建议这样写

    • (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
      {
      if (indexPath.row == 0) return 44;
      if (indexPath.row == 1) return 80;
      if (indexPath.row == 2) return 50;
      return 44;
      }
      而不是
    • (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
      {
      if (indexPath.row == 0) {
      return 44;
      }else if (indexPath.row == 1){
      return 80;
      }else if (indexPath.row == 2){
      return 50;
      }else{
      return 44;
      }
      }

    5.接手一个新项目,快速的调试,查看某个模块或者方法的作用,需要注释掉一个方法,或者某个代码块,直接写return;而不是全选,注释掉;
    比如:查看这个方法loadNewRecommendTags作用

    • (void)loadNewRecommendTags
      {
      return;

      [SVProgressHUD show];
      // 取消之前的任务
      [self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];
      NSMutableDictionary *params = [NSMutableDictionary dictionary];
      }

    6.监听键盘的通知建议:
    UIKIT_EXTERN NSString *const UIKeyboardWillChangeFrameNotification
    而不是,下面代码;因为键盘可能因为改变输入法,切换成表情输入,切换成英文,那么frame可能会变高,变矮,不一定会发出下面这些通知,但是肯定会发上面的通知

    7.如果声明的属性,只想使用的get方法,不使用set方法,并且不想让外界更改这个属性的值,那么建议在括号里面加readonly;示例:
    @property(nonatomic,readonly,getter=isKeyWindow) BOOL keyWindow;

    8.从系统相册中取照片之前,应该判断系统相册是否可用,如果从相机中拍照获取,要判断相机是否可用
    // 判断相册是否可以打开
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) return;

    // 判断相机是否可以打开
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) return;

    9.在导航控制中,或它的子控制器,设置导航栏的标题应该用self.navigationItem.title = @“标题”而不建议self.title = @“标题”;

    10.大量操作图层会可能造成应用很卡,给用户体验差,所以尽量不要操作图层;比如设置按钮圆角,比如给button设置圆角;
    self.loginBtn.layer.cornerRadius = 5;
    self.loginBtn.layer.masksToBounds = YES;

    11.耗时操作应该放在子线程,避免卡主主线程,比如计算文件大小,下载大文件,清除缓存;

    相关文章

      网友评论

          本文标题:tips

          本文链接:https://www.haomeiwen.com/subject/bvwsrxtx.html