iOS注意点

作者: 不进则退 | 来源:发表于2017-01-25 17:02 被阅读131次
    • 子控件的x始终与保持父控件宽度一半保持一致:

    • 使用拖拽约束的方法,动态改变约束;

    • 使用masonry,
      make.left.equalTo(superView).with.offset(superView.frame.size.width * 0.2);

    • MacOS 10.12安全与隐私没有允许任何来源的app选项解决办法
      MacOS 10.12之后系统偏好设置-安全&隐私下面去除了允许安装任何来源,导致很多软件运行不了,解决方法:打开终端,输入以下命令
      sudo spctl --master-disable

    • 枚举enum 建议使用 NS_ENUM 和 NS_OPTIONS 宏来定义枚举类型

    • 数据类型的正确使用

    int -> NSInteger  
    unsigned -> NSUInteger  
    float -> CGFloat  
    动画时间 -> NSTimeInterval
    
    • 无论是 MVC 模式还是 MVVM 模式,业务逻辑都不应当写在 Model 里:MVC 应在 C,MVVM 应在 VM。
    • 由于字符串值可能会改变,所以要把字符串相关属性的“内存管理语义”声明为 copy 。
    • 禁止默认的手势滑动返回
    - (void)viewWillAppear:(BOOL)animated
    {
          [super viewWillAppear:animated];  
          //屏蔽右滑返回手势
          self.navigationController.interactivePopGestureRecognizer.enabled = NO;
    }
    
    - (void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
    }
    
    • 字符串UTF-8解码编码
      iOS中对字符串进行UTF-8编码:输出str字符串的UTF-8格式
      [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
      解码:把str字符串以UTF-8规则进行解码
      [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    • UIWebView
    // 清除cookies
    NSHTTPCookie *cookie;
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (cookie in [storage cookies]) { [storage deleteCookie:cookie];}
    
    // 清除UIWebView的缓存
    [[NSURLCachesharedURLCache] removeAllCachedResponses];
    
    • null的处理
      [string isKindOfClass:[NSNull class]];
      数组不允许是nil,其他情况例如setText:可以是nil
      null都不允许,可以用上面的方法排除;
    • arc环境下编译非arc
      -fno-objc-arc
    • 随机数:
      arc4random( ) 会生成任意正整数和0
      arc4random_uniform(100) 会生成0~99的整数 (包括0和99,但是没有100)
    • 打电话
      三种方式:
      1>@“tel://10010”; openURL,缺点但是不会回到应用
      2>@“telprompt://10010”; openURL,缺点是私有API,所以可能不会被审核通过
      3>添加webView loadRequest,要注意其中webview没有frame
    • 发短信
      1>@“sms://10010” openURL
      2>#import<MessageUI/MessageUI.h]] >
    • 发邮件
      1>@“mailto://10010@qq.com” openURL
      2>控制器
    • 为应用评分
      注意一定要有Apple ID
    NSString*appid =@"725296055";       
    NSString*str = [NSStringstringWithFormat:@"itms-apps://itunes.apple.com/cn/app/id%@?mt=8", appid];
    // 或者也可以写http://
    NSURL*url = [NSURL URLWithString:str];
    [[UIApplicationsharedApplication]openURL:url];
    
    • 对数组中每一个对象都执行同样的操作有两种方法:
      一种是遍历数组,拿到所有的对象,进行操作;
      还有一种是[array makeObjectsPerformSelector:@selsetor() withObject:…];
    • 计时器的方法,如果刷新的比较慢,通常是NSTimer,但是如果在很短的时间里面调用很多次方法,用CADisplayLink,一秒内刷新60次
    // 新建定时器
    CADisplayLink*link = [CADisplayLinkdisplayLinkWithTarget:self selector:@selector(update)];
    [link addToRunLoop: [NSRunLoop mainRunLoop]forMode:NSDefaultRunLoopMode];
    self.link= link;
    // CADisplayLink 作为成员变量的时候属性参数strong
    // 取消定时器:
    [self.link invalidate];
    self.link=nil;
    
    • 显示/隐藏Mac隐藏文件命令如下:
      显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true
      隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false
    • Tabbar的默认高度是49
        //设定Tabbar的点击后的颜色
        [[UITabBar appearance] setTintColor:[UIColor redColor]];
        //设定Tabbar的颜色
        [[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];
    
    • 自定义了leftBarbuttonItem左滑返回手势失效了怎么办
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:img style:UIBarButtonItemStylePlain target:self action:@selector(onBack:)];
    self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
    
    • ScrollView莫名其妙不能在viewController划到顶怎么办
      self.automaticallyAdjustsScrollViewInsets = YES;
    • 如果要使用静态单元格,则需要storyboard的UITableViewController
    • 根据URL创建 NSURLRequest 请求
    NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60];
    //参数cachePolicy表示缓存策略,枚举类型,值有以下几种:
    NSURLRequestUseProtocolCachePolicy = 0 NSURLRequest默认的cache policy,使用Protocol协议定义。是最能保持一致性的协议。
    NSURLRequestReloadIgnoringCacheData = 1 忽略缓存直接从原始地址下载
    NSURLRequestReturnCacheDataElseLoad = 2  只有在cache中不存在data时才从原始地址下载
    NSURLRequestReturnCacheDataDontLoad = 3  只使用cache数据,如果不存在cache,请求失败;次策略用于没有建立网络连接离线模式;
    NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4,  忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似。
    NSURLRequestReloadRevalidatingCacheData = 5  验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据。
    
    • 一个视图可以有很多个手势,但是一个手势只能添加到一个视图,如果需要添加到另一个视图中,需要再新建一个手势;并且一个view是可以添加多个手势,但是默认只有一个有效,要使多个手势有效,要实现手势代理方法,遵守协议<UIGestureRecognizerDelegate>,并且每个手势都要设置代理gesture.delegate = self;
    /** *  是否允许多个手势识别器同时有效 *  Simultaneously : 同时地 */
     - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
    shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
    { 
       return YES;
    }
    
    • 非arc文件和arc文件共存
      将非arc文件在arc环境下共存:
      标记非arc文件:-fno-objc-arc
      将arc文件在非arc环境下共存:
      标记arc文件:-f-objc-arc
    • 随机颜色
    int r = arc4random_uniform(255+1); // 表示生成0~255的随机整数     
    UIColor*color = [UIColor colorWithRed:(r)/255.0 green:(r)/255.0 blue:(r)/255.0 alpha:1.0];
    
    • 图层抖动
    CAKeyframeAnimation *shake = [CAKeyframeAnimation  animation];
    shake.keyPath = @“transform.translation.x”
    shake.duration = 0.15;
    CGFloat delta = 10;
    shake.values = @[@0, @( - delta), @0, @(delta)];
    shake.repeatCount = 2;
    [self.view.layer addAnimation: shake forKey:nil];
    
    • 区分BundleVersion和BundleShortVersionString


      区分BundleVersion和BundleShortVersionString .gif

      CFBundleVersion
      CFBundleShortVersionString

    • iOS启动和关闭状态栏网络请求标志
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];// 启动状态栏网络请求指示  
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];// 关闭状态来网络请求指示
    

    相关文章

      网友评论

        本文标题:iOS注意点

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