码迷,mamicode.com
首页 > 其他好文 > 详细

点语法

时间:2014-09-14 23:30:47      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:style   color   io   os   ar   strong   div   sp   代码   

凡是符合系统默认setter、getter书写格式的方法都可以使?用点语 法。 

#import "Student.h"
 
@implementation Student
 
- (void)setAge:(int)newAge {
    age = newAge;
}
- (int)age {
    return age;
}
@end
 
#import <Foundation/Foundation.h>
#import "Student.h"
 
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        Student *stu = [[Student alloc] init];
 
       // 设置age的值
        stu.age = 10; // 等价于[stu setAge:10];
 
        // 取出age的值
        int age = stu.age; // 等价于int age = [stu age];
 
        NSLog(@"age is %i", age);
 
        [stu release];
    }
    return 0;
}
 
注意:在设置age的值时,将原来的[stu setAge:10]替换成stu.age = 10,两个式子完全等价,这也就是说,stu.age并不是直接访问stu对象的变量age,而是编译器遇到stu.age的时候,会自动将代码展开为[stu setAge:10]。直接访问应是stu->age,而非stu.age。
 stu.age = 10 [stu age]的转换过程类似。
 
总结:OC点语法的本质是方法调用,不是直接访问成员变量。
验证方法:在get与set方法中设置NSLog输出语句。
 
点语法与self的陷阱:
1 - (void)setAge:(int)newAge {
2    self.age = newAge;
3 }
错误:会造成死循环。
self.age相当于[self setAge:newAge];
自身调用自身。。。。。

 

点语法

标签:style   color   io   os   ar   strong   div   sp   代码   

原文地址:http://www.cnblogs.com/Alling/p/3971899.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!