iOS注意点

  • 子控件的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
  • 发邮件
    1>@“mailto://[email protected]” 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)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是可以添加多个手势,但是默认只有一个有效,要使多个手势有效,要实现手势代理方法,遵守协议,并且每个手势都要设置代理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


    iOS注意点_第1张图片
    区分BundleVersion和BundleShortVersionString .gif

    CFBundleVersion
    CFBundleShortVersionString

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

你可能感兴趣的:(iOS注意点)