最新版本SDK优化了开发体验,编译过程会提供更多提示警告,建议你修改。这些功能也可以自主选择用或者不用,当然,苹果喜欢你用他推荐的东西。。。

1 . @avalibale 语法,同步判断当前iOS系统是否满足需求。例如:

 if (@available(iOS 11, *)) { // >= 11
DLog(@"XXX1");
} else if (@available(iOS 10, *)) { //>= 10
DLog(@"XXX2");
} else { // < 10
DLog(@"XXX3");
}

(2)声明或者引用一些api需要在指定iOS版本才起作用会有warning,这个时候 可以用1 去做判断。参考代码:

1.2 如果是对方法的声明 添加API_AVAILABLE(ios()) ,就不用再方法里面做系统版本判断了,错用会有警告提示。

例如:

(2)如果在类之前声明 API_AVAILABLE(ios(11)) 就是对该类添加了系统版本约束。

(3) 针对runtime 或者 c/c++ 方法中里面,也有对应判断系统版本方法,相似 @avalibale 语法

__builtin_available 去判断

对类的约束:

(4)苹果鼓励你升级Xcode 使用最新sdk 和操作以上方法,但是也不妨碍回归老版本sdk,这时候@available方法在

编译时候 ,会被忽略不做警告提示。

但个人认为,已经做版本判断了的话,还是要注意业务逻辑的。这个功能也是可选的使用下图。当然苹果鼓励你

操作最新语法 去运用到项目中来。

2 .   analyze

2.1  使用该分析功能 会帮你提示 类型错误提示。举例参考2.2.1 NSNumber类型和数字类型比大小,这个会出问题 。 当 photoCount没赋值就是nil 会返回 NO, 如果有值 都会返回YES。这可不是一个正常的比大小的逻辑 乱套了,要知道的是 类型使用错误通常的直接反应就是崩溃,这类问题还是很严重的。

(1)错误类型比大小

(2) analyze 提示出错

(3)修正错误

(4) 这个这个也是选择使用的方法参考下面图片

2.2  声明单利,会遇到的问题

(1)只能有一个实例

(2)dispatch_once 使用谓词 一定是静态 或者全局来进行必要修饰 。

解决使用错误 给的例 是使用 NSLock 同步锁 。

(3)资源竞争造成的死方式锁,数据读取或者存储都不正常

2.3 不要使用copy 修饰可变类型 比如可变数组可变字典等

(1) 如下图会出现什么问题??

(2) 用copy修饰可变类型,会导致可变类型 变成普通类型,这样可变数组变成不可变数组了,再动态添加元素,就会崩溃

因为动态添加元素根本不是 NSArray 里面的方法。。。

(3)analyze 帮助我们提示这种 应该修改的错误

(4)还可以选择 在编译过程顺便 analyze这个我真是 之前都是想起来analyze ,现在build 就可以,这样更方便我们查找

潜在问题。

3 .

(1)引用已经释放的对象(野指针 崩溃)会 做提示。 下面代码有什么问题?

分析:enumerateKeysAndObjectsUsingBlock: 循环体相当于一个自动释放内存池,用过即废掉,

所以外部再引用NSError要展示信息的话 一定会崩溃的发生野指针错误。

(2)两种解决方案

a.

b.

详细解释: 取地址符号的error写法是要渗透到方法里面可以被修改的变量对象。 这就说明,方法对error来说

就是强引用,如果在方法里被销毁,外边不引用了还好,如果继续引用error就会报野指针错误而崩溃。

模拟销毁不是在方法内置error为nil而是放到自动释放内存池里面,自己也可以模拟出这种情况。这就进一步验证了

关于字典的快速遍历的循环体是即时销毁的。因此,如果需要继续使用error一定要处理成强引用写法。

测试模拟:

销毁模拟 :

(3) 举例说类似C语言,如果声明方法不指定类型虽然可以编译通过,但是现在可以报警告,防止未来不明确调用

会出问题:“not type safe” 类型不安全。

改了警告说的 类型不安全问题,滥用错误引用就会报错:

(4)同理:闭包函数也是一样的:

改后,如果滥用就报错

(5)这个也是在build时候检查, 也可以选择使用该项检查,参考配置

4 . C++ 的开发体验 优化与支持 略 (目前还没这个经验。。。)

参考:

(1)https://developer.apple.com/videos/play/wwdc2017/411/

iOS 11 Xcode9开发 新特性学习 (警告篇)的更多相关文章

  1. iOS 11 Xcode9开发 新特性学习 (新方法篇)

    1 .  引入github (1) 在Xcode 9 中,引入了 gitHub,新源代码管理导航器 可以展示branch分支和 tag标签. (2)点进去,就可以看指定一次commit了哪些东西 2 ...

  2. (数据科学学习手札139)geopandas 0.11版本重要新特性一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...

  3. java8 新特性学习笔记

    Java8新特性 学习笔记 1主要内容 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 其他新特性 2 简洁 速度更快 修 ...

  4. 使用Git分支开发新特性或修复Bug与使用Git分支开发新特性或修复Bug

    使用Git分支开发新特性或修复Bug 通过分支,可以在不影响原有代码的前提下改变代码,主要用于开发新功能新特性.下 一代产品 为已经发布的正式版修复bug 团队开发时为每个人建立一个分支,从而避免相互 ...

  5. Java8 新特性学习 Lambda表达式 和 Stream 用法案例

    Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...

  6. iOS开发——新特性OC篇&IOS9 SDK新特性

    iOS9 SDK新特性 WWDC 2015苹果开发者大会是移动开发者一年一度的盛会,InfoQ中文站除了第一时间整理Keynote内容分享给大家之外,还邀请了资深的一线开发者分享他们的收获.本文为王巍 ...

  7. iOS开发——新特性OC篇&Swift 2.0新特性

    Swift 2.0新特性     转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度 ...

  8. iOS开发——新特性OC篇&IOS9 系统新特性

    IOS9 系统新特性 2015年6月89号凌晨召开的WWDC 2015苹果开发者大会发布了全新的iOS 9系统,PC6小编今天给大家整理了这次iOS9的系统更新带来了哪些新的功能与升级,本次新功能一览 ...

  9. iOS开发——新特性OC篇&Objective新特性

    Objective新特性 Overview 自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时, ...

随机推荐

  1. int和Integer差别

    种原始数据类型之中的一个. Java为每一个原始类型提供了封装类.Integer是java为int提供的封装类. 原始数据类型包含byte.int.char.long.float.double.boo ...

  2. Servlet 点击计数器

    网页点击计数器 很多时候,您可能有兴趣知道网站的某个特定页面上的总点击量.使用 Servlet 来计算这些点击量是非常简单的,因为一个 Servlet 的生命周期是由它运行所在的容器控制的. 以下是实 ...

  3. load data导入数据之csv的用法

    今天总结一下:csv格式文件导入的方法. 1.准备数据表:CSV

  4. C#调用python脚本

    因项目需要,需要使用C#控制台程序执行python脚本,查询各种资料后可以成功调用了,记录一下,以备后面遗忘. 只尝试了两种调用方式,第一种只适用于python脚本中不包含第三方模块的情况,第二种针对 ...

  5. ios - UINavigationBar添加背景图片的几种简单思路

    UITabBarController下面常常需要为多个ViewController设置导航栏样式,总结了一下遇到过的为UINavigationBar添加背景图片的几种简单思路 以设置背景图片为例: 第 ...

  6. 使用PHP函数输出前一天的时间和后一天的时间

    1.明确date()函数和time()函数的功能,其中time()函数是获取时间戳函数 2.输出前一天的当前时间: echo '一天之前的时间为:'.date('Y-m-d H:i:s',time() ...

  7. [转]Excel关闭进程

    原文地址:http://www.cnblogs.com/feishu/archive/2010/05/08/1730797.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  8. Android无线测试之—UiAutomator UiObject API介绍三

    拖拽与滑动 一.拖拽与滑动的示意图 二.拖拽与滑动相关的API 返回值 API 描述 boolean dragTo(UiObject destObj, int setps) 拖拽对象到另一个对象位置上 ...

  9. HTML学习笔记——常用元素及其属性(一)

    1.img 标签 -- 代表HTML图像 img标签是单独出现的,<img /> 语法: <img src="URI" alt="alttext&quo ...

  10. 【BZOJ3444】最后的晚餐 乱搞

    [BZOJ3444]最后的晚餐 Description [问题背景] 高三的学长们就要离开学校,各奔东西了.某班n人在举行最后的离别晚餐时,饭店老板觉得十分纠结.因为有m名学生偷偷找他,要求和自己暗恋 ...