OC语言--点语法
2014-12-23 11:01
176 查看
一、点语法
为了让其他语言的开发人员能快速的上手OC语言,因为其他语言例如java、c++等语言用点语法,而OC中的set方法的调用
为[对象 setter:参数],例如:[p setAge: 10],这种格式的调用在其他语言中没有相似的语法,所以苹果公司开发了点语法,点语法主要是替换setter、getter。
二、点语法替代set方法、get方法的调用:
一般set方法、get方法的调用:
应用点语法的set方法、get方法的调用:
注意:点语法不是访问成员变量,p->_age才是访问成员变量。
解释:点语法是编译器特性,当编译器遇到p.age时会将p.age转为[p setAge]或[p age]。
编译器如何区分点语法转为get方法还是set方法?
如果p.age是赋值,则编译器会将点语法转为set方法,如果p.age是取值则编译器会将点语法转为get方法。
所以点语法根据是否赋值来区分采用set方法或get方法的。
死循环:点语法应用的时候要注意是否会引发死循环
1.set方法中的死循环
则语句变为:[self setAge: age],当对象调用set方法的时候会进入setAge方法中,当遇到self.age = age语句的时候,
就会再次调用set方法(当前方法),则会一直在set方法中一直循环。
2.get方法中的死循环
当对象调用get方法的时候会进入age方法中,当遇到return self.age;语句的时候,就会进入get方法(当前方法),则会一直在get方法中一直循环。
3.所以set、get方法的正确写法:
-(void) setAge:(int)age
{
_age = age; // 直接赋值
//self -> _age = age; 这种赋值是正确的
}
- (int)age
{
return _age; // 直接返回
//return self -> _age; 这种写法也是正确的
}
总结:
1.点语法的本质是方法调用。
2.点语法是编译器特性,编译器遇到点语法会将点语法转为相应的方法调用语句,然后调用方法。
3.注意点语法在set、get方法中的死循环。
4.点语法不是访问成员变量。点语法:p.age,成员变量访问:p->_age;
为了让其他语言的开发人员能快速的上手OC语言,因为其他语言例如java、c++等语言用点语法,而OC中的set方法的调用
为[对象 setter:参数],例如:[p setAge: 10],这种格式的调用在其他语言中没有相似的语法,所以苹果公司开发了点语法,点语法主要是替换setter、getter。
二、点语法替代set方法、get方法的调用:
一般set方法、get方法的调用:
Person *p = [Person new]; [p setAge] = 10; //调用set方法 int a = [p age]; //调用get方法 NSLog(@"%d", a);
应用点语法的set方法、get方法的调用:
Person *p = [Person new]; p.age = 10; //用点语法替代set方法 int a = p.age; //用点语法替代get方法 NSLog(@"%d", a);
注意:点语法不是访问成员变量,p->_age才是访问成员变量。
解释:点语法是编译器特性,当编译器遇到p.age时会将p.age转为[p setAge]或[p age]。
编译器如何区分点语法转为get方法还是set方法?
如果p.age是赋值,则编译器会将点语法转为set方法,如果p.age是取值则编译器会将点语法转为get方法。
所以点语法根据是否赋值来区分采用set方法或get方法的。
死循环:点语法应用的时候要注意是否会引发死循环
1.set方法中的死循环
-(void) setAge:(int)age { //_age = age; 直接赋值 self.age = age; //[self setAge:age] 引发死循环 }解释:注意这个set方法是错误的,会引发死循环。self.age是赋值语句,编译器会将self.age转为[self setAge];
则语句变为:[self setAge: age],当对象调用set方法的时候会进入setAge方法中,当遇到self.age = age语句的时候,
就会再次调用set方法(当前方法),则会一直在set方法中一直循环。
2.get方法中的死循环
- (int)age { return self.age;//[self age] 引发死循环 }解释:注意这个get方法是错误的,会引发死循环。跟set方法类似,self.age是不是赋值,编译器会将self.age转为[self age];
当对象调用get方法的时候会进入age方法中,当遇到return self.age;语句的时候,就会进入get方法(当前方法),则会一直在get方法中一直循环。
3.所以set、get方法的正确写法:
-(void) setAge:(int)age
{
_age = age; // 直接赋值
//self -> _age = age; 这种赋值是正确的
}
- (int)age
{
return _age; // 直接返回
//return self -> _age; 这种写法也是正确的
}
总结:
1.点语法的本质是方法调用。
2.点语法是编译器特性,编译器遇到点语法会将点语法转为相应的方法调用语句,然后调用方法。
3.注意点语法在set、get方法中的死循环。
4.点语法不是访问成员变量。点语法:p.age,成员变量访问:p->_age;
相关文章推荐
- 黑马程序员——OC语言学习——Xcode开发初始化、点语法、成员变量作用域、关键字@property和@synthesize
- 黑马程序员——OC语言------OC特有语法:分类、description、类对象、SEL
- OC语言基本语法
- 黑马程序员-OC语言基础:面向对象语法 三
- 黑马程序员——OC语言基础篇---核心语法
- 黑马程序员IOS-OC语言-点语法、@property
- 黑马程序员-OC语言基础:OC特有语法
- 黑马程序员——OC语言基础篇---基本语法、类
- 黑马程序员——OC语言——点语法
- iOS 开发OC语言(六) Block语法简介
- 爬爬爬之路:OC语言(一) 语法简介
- 黑马程序员——OC语言------NSString、多文件开发、点语法、成员变量的作用域、@property和@synthesize
- OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法
- 黑马程序员 OC语言 - 4 OC特有语法
- 黑马程序员-OC语言-点语法介绍和使用(听课笔记)
- 黑马程序员 -- OC语言 NSString使用 点语法 构造 分类
- 黑马程序员——OC语言基本语法
- 爬爬爬之路:OC语言(六) Block语法简介
- iOS OC语言(一)语法简介 , OC 的特点
- OC语言——基本语法和思想