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


一、点语法
当编译器遇到点语法时(如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;
}

二、成员变量的作用域
  1. @public    在任何地方均可直接访问对象成员变量 
  2. @private    只能在当前类的对象方法中直接访问(间接可以通过get、set方法访问)【@intplementation中定义变量默认是@private】
  3. @protected   能在当前类和子类的对象方法中直接访问【 @interface中不写就默认@protected】
  4. @package     只要处于同一个框架中,就能直接访问对象的成员变量,介于public和private之间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值