OC语法相关

@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

OC语法相关的相关文章

oc总结 --oc基础语法相关知识

m是OC源文件扩展名,入口点也是main函数,第一个OC程序: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { theme manager @autoreleasepool { NSLog(@"Hello, World!"); } return 0; } 预处理指令import会自动检验头文件有没有被包含过,防止重复包含,NSLOG是日志输出,OC字符串以@开头,自动换行

(转载)OC语法总结

1.定义类:@interface 类名 : 父类@end 2.使用:(冒号)表示继承一个类Student : NSObject 3.使用()定义一个Catagory(类别) * 作用:在不改变原有类结构的基础上,扩展原有类的方法(不能扩展属性),但不建议重载原有类的方法 * 开发工具默认生成的文件为:类名+Catagory名称 * Catagory可以写在单独的文件中,也可以写在原有类的文件中,如何写根据需求来决定. 4.使用<>表示实现一个Protocol(协议),如需实现多个协议,将协议名

转:OC语法总结

1.定义类:@interface 类名 : 父类@end 2.使用:(冒号)表示继承一个类Student : NSObject 3.使用()定义一个Catagory(类别) * 作用:在不改变原有类结构的基础上,扩展原有类的方法(不能扩展属性),但不建议重载原有类的方法 * 开发工具默认生成的文件为:类名+Catagory名称 * Catagory可以写在单独的文件中,也可以写在原有类的文件中,如何写根据需求来决定. 4.使用<>表示实现一个Protocol(协议),如需实现多个协议,将协议名

【OC语法快览】三、创建实例对象

Creating Objects  创建对象 There are two main ways to create an object. The first is the one you saw before: 创建对象主要有两种方法.第一种如下: NSString* myString = [NSString string]; This is the more convenient automatic style. In this case, you are creating an autorel

【IOS】IOS快速入门之OC语法

Objective-C 是 C 语言的超集 您还可以访问标准 C 库例程,例如在 stdlib.h 和 stdio.h 中声明的那些例程. Objective-C 还是一种非常动态的程序设计语言,而且这种动态是其最大优势.这种动态体现在它允许在运行应用程序时(即运行时)才去确定其行为,而不是在生成期间就已固定下来.因此,Objective-C 的动态机制让程序免受约束(编译和链接程序时施加的约束):进而在用户控制下,将大多数符号解析责任转移到运行时. 当您想要在源代码中包括头文件时,请在头文件或

OC语法——Object-C retain、copy、mutableCopy的详细分析

OC语法中的retain.copy.mutableCopy 大家都基本知道它的基本意思,但是对于mutable类型和immutable类型的处理上有很多童鞋并没有真正测试过,今天就和大家分享下: 1.先来看下immutable类型的非容器类: NSString的retain.copy和mutableCopy的测试 NSString *string = @"abc"; NSString *retainString = [string retain]; NSString *copyStri

【OC语法快览】四、基础内存管理

Basic Memory Management                                                           基础内存管理 If you're writing an application for Mac OS X, you have the option to enable garbage collection. In general, this means that you don't have to think about memory

【OC语法快览】六、类实现

Class Implementation      类实现 Let's create an implementation, starting with the getters: 接下来创建一个类实现,从访问器开始: #import "Photo.h" @implementation Photo - (NSString*) caption { return caption; } - (NSString*) photographer { return photographer; } @en

【OC语法快览】二、存取方法

Accessors 存取方法 All instance variables are private in Objective-C by default, so you should use accessors to get and set values in most cases. There are two syntaxes. This is the traditional 1.x syntax: OC中所有的实例变量默认是私有的,所以多数情况下你应该使用访问器来获得和设置实例变量的值.访问器