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. 圆角属性不会触发离屏渲染
单一的设置视图的圆角属性不会触发离屏渲染,当同时满足以下条件时才会触发离屏渲染:
- 设置 layer.cornerRadius
- 设置 masksToBounds 为 YES
- 视图有子视图
UIImageView 是一个特例,它是一个没有子视图的控件,然而它在某些情况下依旧会触发离屏渲染,具体是:
当使用 jpg 格式图片时,会触发离屏渲染;
在 iOS 9 之前使用 png 图片时,会触发离屏渲染,iOS 9 之后不会触发。