【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
- 【Objective-C学习笔记】核心语法——点语法、id类型、SEL类型
- Objective-C基础-——核心语法-description和sel
- 【Objective-C学习笔记】核心语法——构造方法
- 【Objective-C学习笔记】核心语法——分类-Gategory
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Web数据库
- #笔记#圣思园 JavaSE 第8讲——理解面向对象程序设计
- 2.29
- 广泛的法国洒的太过份对方速度速度分辅导书
- 数字图像处理经典论文汇总
- 【Objective-C学习笔记】核心语法——点语法、id类型、SEL类型
- GOF设计模式之适配器模式的理解
- 简单工厂模式
- java中解决了一个逻辑上的错误
- 2.30
- bootstrap的web前端模板
- mac下java 开发环境搭建
- GOF23设计模式之适配器模式的实现
- jQuery Validate验证框架详解