Objective-C 中public、protected、private 的使用

fmms 12年前發布 | 50K 次閱讀 iOS開發 移動開發 Objective-C

Objective-C中,類的實例化變量的范圍有@private、@protected、@public。他們代表的意思和C++中相同,只是前面添加了一個@符號。下面介紹一下他們代表的范圍:

指令 意思

@private

作用范圍只能在自身類
@protected 作用范圍在自身類和繼承自己的子類,什么都不寫,默認是此屬性。
@public 作用范圍最大,在任何地方

下面是官方的圖:

Objective-C 中public、protected、private 的使用

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

下面是一個例子,來說明他們之間的關系:

實現一個Boss類:

    #import 




   






    @interface Boss : NSObject
    {





    @private         int age;
    @protected
        NSString *job;
    }
    @end




   
實現一個Worker類繼承Boss類:
#import 




   





#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,會報錯:

Objective-C 中public、protected、private 的使用

但是調用job是沒有問題的。

下面在其他類中調用Worker類:

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

運行結果:

Objective-C 中public、protected、private 的使用

但是調用protected的屬性會報錯:

Objective-C 中public、protected、private 的使用

所以當一些比較重要的屬性,不能隨便更改的時候,要用private,這樣避免其他繼承類修改此屬性。

文章出處:http://wangjun.easymorse.com/?p=1615

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!