您的位置:首页 > 移动开发 > Objective-C

【Objective-C学习笔记】核心语法——点语法、id类型、SEL类型

2015-04-03 21:45 459 查看
第一部分 点语法

一、基本使用
点语法的本质还是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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: