【Objective-C学习笔记】核心语法——点语法、id类型、SEL类型
2015-04-03 21:45
459 查看
第一部分 点语法
一、基本使用
点语法的本质还是set方法和get方法,点语法可以和set方法和get方法互换。但是如果没有set方法和get方法,那么不能使用点语法。
第二部分 id类型
一、原型
二、注意
1、使用id的时候,不需要再加*。
2、如果把对象赋值给id类型,那么如果访问对象的实例变量时,请不要使用点语法。
第三部分 SEL类型
一、基本概念
1、SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,根据SEL数据去找对应的方法地址,找到方法地址就可以调用方法。
2、每个方法都有一个与之对应的SEL类型的数据。
二、SEL对象的创建
1、把对象名包装成SEL类型的数据
1、每个方法中都有隐藏的_cmd的SEL类型的数据,_cmd代表当前方法,_cmd相当于@selector(test)
一、基本使用
点语法的本质还是set方法和get方法,点语法可以和set方法和get方法互换。但是如果没有set方法和get方法,那么不能使用点语法。
Person *p = [Person new]; [p setAge:10]; // 等价于 p.age = 10; int a = [p age]; // 等价于 int a = p.age;二、使用注意
@implementation Person - (void)setAge:(int)age { _age = age; // 会引发死循环 // self.age = age; [self setAge:age]; } - (int)age { return _age; // 会引发死循环 // return self.age; [self age]; }
第二部分 id类型
一、原型
typedef struct objc_object *id;id是一个指针,指向了所有继承自NSObject类的对象,可以把id看作是NSObject *。
二、注意
1、使用id的时候,不需要再加*。
2、如果把对象赋值给id类型,那么如果访问对象的实例变量时,请不要使用点语法。
id p = [Person new]; [p setAge:10]; //等价于 //NSObject *p = [Person new]; //p.age = 10; 错误写法 //这是多态,而setAge方法属于子类特有的,作为父类,是不可以直接调用的,编译器会报错,父类中没有setAge方法
第三部分 SEL类型
一、基本概念
1、SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,根据SEL数据去找对应的方法地址,找到方法地址就可以调用方法。
2、每个方法都有一个与之对应的SEL类型的数据。
二、SEL对象的创建
1、把对象名包装成SEL类型的数据
- (void)test { NSLog(@"test----"); } Person *p = [Person new]; // 直接调用 [p test]; //把test包装成SEL类型的数据 SEL s = @selector(test); //间接调用 [p performSelector:s];2、把方法名的字符串包装成SEL类型的数据
NSString *name = @"test"; //把字符串包装成SEL类型的数据 SEL s = NSSelectorFromString(name); //间接调用 [p performSelector:s];三、其他使用
1、每个方法中都有隐藏的_cmd的SEL类型的数据,_cmd代表当前方法,_cmd相当于@selector(test)
- (void)test { //将SEL类型的数据转换成NSString对象 NSString *str = NSStringFromSelector(_cmd); }2、错误写法造成死循环
- (void)test { //_cmd代表test方法,会死循环 [self performSelector:_cmd]; }
相关文章推荐
- 黑马程序员----Objective-C学习笔记之类的本质与SEL类型
- 【Objective-C学习笔记】核心语法——构造方法
- 【Objective-C学习笔记】核心语法——分类-Gategory
- 【黑马程序员】Objective-C语言学习笔记之核心语法(四)
- 【Objective-C学习笔记】核心语法——类的本质、description方法
- 【Objective-C学习笔记】核心语法——实例变量作用域、关键字@property和@synthesize
- 【zz】C++开发者快速学习Objective-C语言核心语法
- ASP.NET 3.5核心编程学习笔记(21):LINQ查询语法
- objective-c学习笔记第六章《objective-c 多态,动态类型,动态绑定与java中的区别》
- Objective-C 学习笔记之基本语法(1/2): 类的定义、继承、多态与接口等
- python学习笔记2-核心类型-字符串
- C++开发者快速学习Objective-C语言核心语法
- C++开发者快速学习Objective-C语言核心语法
- Objective-C 学习笔记 - part 2 - 类型定义
- Objective-C学习笔记:数据类型和表达式
- python学习笔记3-核心类型-列表
- Objective-C中的一些特殊的数据类型 id、nil、Nil、SEL
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- PHP学习笔记(2)-语法和数据类型
- Javascript学习笔记(二)Javascript核心之数据类型与值