iOS6、7、8、9新特性总汇和适配说明 (4)

-[NSArray firstObject]可能是Objective-C中被调用做多的API。在Open Radar上一个简单的调查显示有一些需求苹果已经做了记录。好消息是现在这些需求已经得到了解决。. firstObject的使用可以追溯到iOS4.0,但是那时仅仅是一个私有方法。在iOS7以前,工程师用下面的方式来使用它:

Crayon Syntax Highlighter v2.7.1

NSArray *arr = @[];

id item = [arr firstObject];

 

// 在之前你需要做以下工作

id item = [arr count] > 0 ? arr[0] : nil;

1

2

3

4

5

 

NSArray *arr = @[];

id item = [arr firstObject];

 

// 在之前你需要做以下工作

id item = [arr count] > 0 ? arr[0] : nil;

 

[Format Time: 0.0012 seconds]

因为上面的方式很平常,有些人将它作为一个类增加到NSArray中,然后创建他们自己的firstObject方法。

这个方法的问题是这个方法的名字必须是唯一的,否则的话这个方法所引发的问题无法预估。

请确保检查你是否有任何自定义的代码在NSArray上实现了firstObject,如果有的话看看它是否是必须的,不是必须的话就把它全部移除。

六、增加了instancetype

instancetype让iOS7API变得更加难懂。苹果改变了大部分 initializer和简易构造函数(convenience constructors),用instancetype代替id作返回类型。但是这个instancetype是什么呢?

instancetype用来在声明一个方法时告诉编译器其返回类型,它表示返回调用该方法的类的对象。

这比之前返回id的通常做法要好,编译器可以对返回类型做一些检查,如果出现错误,在编译时就能提醒你,而不是在程序运行时发生崩溃。

同时,在调用子类方法时,使用它还可以省去对返回值的强制类型转换,编译器能够正确推断方法的返回值类型。

要说到instancetaype的缺点和优点吗?基本上,在任何可能的情况下都可以使用它。

七、设置UIImage的渲染模式:UIImage.renderingMode

着色(Tint Color)是iOS7界面中的一个重大改变,你可以设置一个UIImage在渲染时是否使用当前视图的Tint Color。

UIImage新增了一个只读属性:renderingMode,对应的还有一个新增方法:imageWithRenderingMode:,它使用UIImageRenderingMode枚举值来设置图片的renderingMode属性。该枚举中包含下列值:

Crayon Syntax Highlighter v2.7.1

// 根据图片的使用环境和所处的绘图上下文自动调整渲染模式

UIImageRenderingModeAutomatic 

 

// 始终绘制图片原始状态,不使用Tint Color

UIImageRenderingModeAlwaysOriginal 

 

// 始终根据Tint Color绘制图片,忽略图片的颜色信息

UIImageRenderingModeAlwaysTemplate

1

2

3

4

5

6

7

8

 

// 根据图片的使用环境和所处的绘图上下文自动调整渲染模式

UIImageRenderingModeAutomatic 

 

// 始终绘制图片原始状态,不使用Tint Color

UIImageRenderingModeAlwaysOriginal 

 

// 始终根据Tint Color绘制图片,忽略图片的颜色信息

UIImageRenderingModeAlwaysTemplate

 

[Format Time: 0.0005 seconds]

renderingMode属性的默认值是UIImageRenderingModeAutomatic,即UIImage是否使用Tint Color取决于它显示的位置。其他情况可以看下面的图例:

 

以下的代码说明了使用一个既定的rendering模式创建图片是多么简单:

Crayon Syntax Highlighter v2.7.1

UIImage *img = [UIImage imageNamed:@"myimage"];

 

img = [img imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

1

2

3

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwgywp.html