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

来源:互联网 发布:网上商城的软件过程 编辑:程序博客网 时间:2024/05/17 22:20
第一部分 点语法

一、基本使用
点语法的本质还是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];}

0 0
原创粉丝点击