黑马成员———OC学习第三天(成员变量作用域)

来源:互联网 发布:java种方法是什么 编辑:程序博客网 时间:2024/05/17 01:06
------- Android培训、Java培训、IOS培训、.NET培训 期待与您交流! ----------

成员变量的作用域

在OC中修饰成员变量的作用域,我们通常用下面的这几个关键字:

  • @public
  • @protected
  • @private
  • @package

1、@public

用@public 修饰成员变量表示:在任何地方都能直接访问对象的成员变量

eg:

#import <Foundation/Foundation.h>@interface Person : NSObject{    @public     int _age; // 定义一个public的成员变量_age}@end@implementation Person@endint main(){     // 定义一个Person对象     Person *p = [Person new];    // 直接访问对象的_age 属性并赋值    p->_age = 100;    return 0;}// 这个示例中,在main函数中直接访问成员变量

2、@protected

用@protected 修饰成员变量表示:成员变量只能在当前类及其子类的对象方法中直接访问

eg:成员变量只能在当前类及其子类的对象方法中直接访问,那么上述示例中在main函数中直接访问成员变量在这里肯定是不行的了。

#import <Foundation/Foundation.h>@interface Person : NSObject{    @protected    int _age;}// 对象方法输出年龄- (void)test;@end@implementation Person// 对象方法test 输出年龄- (void)test{    NSLog(@"这个人的年龄是:%d", _age);}@end@interface Student : Person// 对象方法- (void)test;@end@implementation Student- (void)test{    NSLog(@"Student的年龄是:%d", _age);}@endint main() {    // 定义一个Person对象    Person *p = [Person new];    // 调用对象方法test    [p test];        // 定义一个Student对象    Student *stu = [Student new];    // 调用对象方法test    [stu test];        return 0;}

3、@private

成员变量用@private 修饰表示:成员变量只能在当前类的对象方法中直接访问

eg:

#import <Foundation/Foundation.h>@interface Person : NSObject{    @private    int _age;}// 对象方法输出年龄- (void)test;@end@implementation Person// 对象方法test 输出年龄- (void)test{    NSLog(@"这个人的年龄是:%d", _age);}@end

4、@package

成员变量用@package 修饰表示:只要在同一框架中,成员变量就能直接被访问。

5、总结

默认情况下成员变量的作用域是@protected的,@package一般情况下也是用得比较少,另外在@implementation中其实也是可以定义成员变量的,这里的成员变量默认就是@private的,不过需要注意的@interface和@implementation中定义的成员变量是不能同名的。


0 0