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

objective-c中点语法和成员变量作用域

2014-10-27 19:34 253 查看
一、点语法
当编译器遇到点语法时(如p.age),会自动转换成方法调用,而不是访问成员变量。
如:p.age = 10; 相当于[p setAge:10];
如:int age = stu.age; 相当于[stu age];
在使用点语法的时候,系统会自动展开成相应的方法。
#import <Foundation/Foundation.h>

@interface Person : NSObject  //  定义Person类
{
int _age;
NSString *_name;
}

- (void)setAge:(int)age;
- (int)age;

- (void)setName:(NSString *)name;
- (NSString *)name;

@end

@implementation Person

- (void)setAge:(int)age
{
//_age = age;

NSLog(@"setAge:");

// 会引发死循环
//self.age = age; // [self setAge:age];
}

- (int)age
{
NSLog(@"age");
return _age;
// 会引发死循环
//return self.age;// [self age];
}

- (void)setName:(NSString *)name
{
_name = name;
}

- (NSString *)name
{
return _name;
}

@end

int main(int argc, const char * argv[])
{
Person *p = [Person new];

// 点语法的本质还是方法调用
p.age = 10; // [p setAge:10];

int a = p.age; // [p age];

p.name = @"Jack";

NSString *s = p.name;

NSLog(@"%@", s);

return 0;
}
二、成员变量的作用域

@public 在任何地方均可直接访问对象成员变量
@private 只能在当前类的对象方法中直接访问(间接可以通过get、set方法访问)【@intplementation中定义变量默认是@private】
@protected 能在当前类和子类的对象方法中直接访问【 @interface中不写就默认@protected】
@package 只要处于同一个框架中,就能直接访问对象的成员变量,介于public和private之间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: