iOS 踩坑日记(二)

3. 类别和扩展的区别

扩展不会像类别一样,有独立的实现文件(.m 文件),它的实现依赖于对应类

在类别中添加属性,只会生成 get 和 set 方法,不会生成实例变量,而扩展中都会生成。

类别和扩展在声明时有区别:

// 类别
@implementation Person (XWKit)

@end
// 扩展
@interface Person ()

@end
4. NSString 的 stringByAppendingPathComponent 会将 "//" 变为 "/"

在使用字符串的拼接方法时,“//” 会被转为 “/”,这是因为第一个“/”被当做了转义字符,因此,这个方法只可用于文件路径(file path)的拼接。如下:

NSString *host = @"http://www.baidu.com";
NSString *full = [host stringByAppendingPathComponent:@"news"];
NSLog(@"%@", full); // 输出:http:/www.baidu.com/news
5. 圆角属性不会触发离屏渲染

单一的设置视图的圆角属性不会触发离屏渲染,当同时满足以下条件时才会触发离屏渲染:

  1. 设置 layer.cornerRadius
  2. 设置 masksToBounds 为 YES
  3. 视图有子视图

UIImageView 是一个特例,它是一个没有子视图的控件,然而它在某些情况下依旧会触发离屏渲染,具体是:

当使用 jpg 格式图片时,会触发离屏渲染;
在 iOS 9 之前使用 png 图片时,会触发离屏渲染,iOS 9 之后不会触发。

你可能感兴趣的:(iOS 踩坑日记(二))