@property 参数
copy:NSString;
strong:一般对象
weak:UI控件
assign:基本数据类型
instancetype
instancetype在类型表示上,跟id一样,可以表示任何对象类型
instancetype只能用在返回值类型上,不能像id一样用在参数类型上
instancetype比id多一个好处:编译器会检测instancetype的真实类型
instancetype:
instancetype 主要用于在类方法实例化对象时,让编译器主动推断对象的实际类型
以避免使用id,会造成开发中不必要的麻烦,减少出错几率!
instancetype是苹果在iOS7才开始主推的
C++11 auto
在swift语言中,绝大多数类的实例化,都不需要再指定类型
instancetype只能用于返回值使用!!!不能当做参数使用
1 #import <Foundation/Foundation.h> 2 3 @interface HMAppInfo : NSObject 4 5 @property (nonatomic, copy) NSString *name; 6 @property (nonatomic, copy) NSString *icon; 7 8 /** 9 @property 10 11 1. 生成getter方法 12 2. 生成setter方法 13 3. 生成带下划线的成员变量(记录属性内容) 14 15 readonly的属性不会生成带下划线的成员变量! 16 */ 17 @property (nonatomic, strong, readonly) UIImage *image; 18 19 /** 20 instancetype 主要用于在类方法实例化对象时,让编译器主动推断对象的实际类型 21 22 以避免使用id,会造成开发中不必要的麻烦,减少出错几率! 23 24 instancetype是苹果在iOS7才开始主推的 25 26 C++11 auto 27 在swift语言中,绝大多数类的实例化,都不需要再指定类型 28 29 instancetype只能用于返回值使用!!!不能当做参数使用 30 */ 31 32 /** 通常在写模型的实例化方法时,以下两个方法,都需要实现 */ 33 /** 使用字典实例化模型 */ 34 - (instancetype)initWithDict:(NSDictionary *)dict; 35 /** 类方法可以快速实例化一个对象 */ 36 + (instancetype)appInfoWithDict:(NSDictionary *)dict; 37 38 /** 返回所有plist中的数据模型数组 */ 39 + (NSArray *)appList; 40 41 @end
1 #import "HMAppInfo.h" 2 3 @implementation HMAppInfo 4 // 合成指令,主动指定属性使用的成员变量名称 5 @synthesize image = _image; 6 7 /** 8 使用KVC的注意事项 9 10 1> plist中的键值名称必须与模型中的属性一致 11 2> 模型中的属性可以不全部出现在plist中 12 */ 13 - (UIImage *)image 14 { 15 if (_image == nil) { 16 _image = [UIImage imageNamed:self.icon]; 17 } 18 return _image; 19 } 20 21 - (instancetype)initWithDict:(NSDictionary *)dict 22 { 23 // self 是 对象 24 self = [super init]; 25 if (self) { 26 // 用字典给属性赋值,所有与plist键值有关的方法,均在此处! 27 // self.name = dict[@"name"]; 28 // self.icon = dict[@"icon"]; 29 30 // KVC - key value coding键值编码 31 // 是一种间接修改/读取对象属性的一种方法 32 // KVC 被称为 cocoa 的大招! 33 // 参数: 34 // 1. 数值 35 // 2. 属性名称 36 // [self setValue:dict[@"name"] forKeyPath:@"name"]; 37 // [self setValue:dict[@"icon"] forKeyPath:@"icon"]; 38 // setValuesForKeysWithDictionary本质上就是调用以上两句代码 39 [self setValuesForKeysWithDictionary:dict]; 40 } 41 return self; 42 } 43 44 + (instancetype)appInfoWithDict:(NSDictionary *)dict 45 { 46 // self 是 class 47 return [[self alloc] initWithDict:dict]; 48 } 49 50 + (NSArray *)appList 51 { 52 NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil]]; 53 54 // 创建一个临时数组 55 NSMutableArray *arrayM = [NSMutableArray array]; 56 57 // 遍历数组,依次转换模型 58 for (NSDictionary *dict in array) { 59 [arrayM addObject:[HMAppInfo appInfoWithDict:dict]]; 60 } 61 62 return arrayM; 63 } 64 65 @end
时间: 2024-10-10 14:42:13