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

Object-c中@private、@protected、@public解析

时间:2014-08-02 12:33:53      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:des   style   http   os   io   文件   for   问题   

Objective-C中,类的实例化变量的范围有@private、@protected、@public。他们代表的意思和C++中相同,只是前面添加了一个@符号。下面介绍一下他们代表的范围:

指令 意思

@private

作用范围只能在自身类
@protected 作用范围在自身类和继承自己的子类,什么都不写,默认是此属性。
@public 作用范围最大,在任何地方

下面是官方的图:

bubuko.com,布布扣

具体的可以参考:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocDefiningClasses.html#//apple_ref/doc/uid/TP30001163-CH12-SW1

 

下面是一个例子,来说明他们之间的关系:

实现一个Boss类:

#import <Foundation/Foundation.h>

   

@interface Boss : NSObject 

@private 
    int age; 
@protected 
    NSString *job; 

@end

实现一个Worker类继承Boss类:

#import <Foundation/Foundation.h> 
#import "Boss.h" 
@interface Worker : Boss 

    NSString *name; 
@private 
    NSString *evaluation; 
@protected 
    float wage; 
@public 
    NSString *boss; 

- promoteTo:newPosition; 
@end

在Worker的.m文件中添加:

#import "Worker.h"

   

@implementation Worker 
- promoteTo:newPosition 

    id old = job; 
    job = newPosition; 
    return old; 

-(NSString *)description 

    return [NSString stringWithFormat:@"Worker name:%@,evaluation:%@,job:%@,wage:%f,boss:%@",name,evaluation,job,wage,boss]; 

@end

如果我们在Worker中调用Boss中的私有变量age,会报错:

bubuko.com,布布扣

但是调用job是没有问题的。

下面在其他类中调用Worker类:

Worker *ceo = [[Worker alloc] init]; 
   ceo->boss = @"XX"; 
   [ceo promoteTo:@"YY"]; 
    NSLog(@">>>=%@",[ceo description]);

运行结果:

bubuko.com,布布扣

但是调用protected的属性会报错:

bubuko.com,布布扣

所以当一些比较重要的属性,不能随便更改的时候,要用private,这样避免其他继承类修改此属性。

Object-c中@private、@protected、@public解析,布布扣,bubuko.com

Object-c中@private、@protected、@public解析

标签:des   style   http   os   io   文件   for   问题   

原文地址:http://www.cnblogs.com/shuozi-love/p/3886702.html

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