Objective-C 快速導覽 - 存取修飾指令

屬性 (property) 或方法 (method) 可用存取修飾指令設定權限,共有四種,比較常用的包括 @private 、 @protected 與 @public , @private 只能由類別 (class) 中定義的方法存取, @protected 除了類別中定義的方法存取外,亦可被子類別 (subclass) 存取, @public 則可被所有類別或模組存取。



此外,還有一個 @package , @package 作用在 64 位元的 image 類別,對 32 位元而言, @package 的作用如同 @public 。


舉例如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#import <Foundation/Foundation.h>
 
@interface Demo: NSObject
{
    @private
    int a;
 
    @protected
    int b;
  
    @public
    int c;
  
    @package
    int d;
}
 
- (int) a;
- (int) b;
- (int) c;
- (int) d;
- (id) setA: (int) pa B: (int) pb C: (int) pc D: (int) pd;
 
@end
 
@implementation Demo
 
- (int) a
{
    return a;
}
 
- (int) b
{
    return b;
}
 
- (int) c
{
    return c;
}
 
- (int) d
{
    return d;
}
 
- (id) setA: (int) pa B: (int) pb C: (int) pc D: (int) pd
{
    a = pa;
    b = pb;
    c = pc;
    d = pd;
    return self;
}
 
@end
 
@interface Demo2: Demo
 
- (void) do_something;
 
@end
 
@implementation Demo2
 
- (void) do_something
{
    NSLog(@"%d, %d, %d, %d", [self a], b, c, d);
}
 
@end
 
int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  
    Demo2 *demo = [[Demo2 alloc] init];
    [demo setA: 1 B: 2 C: 3 D: 4];
    [demo do_something];
  
    [pool drain];
    return 0;
}
 
/* 《程式語言教學誌》的範例程式
   檔名:classdemo14.m
   功能:Objective-c 程式範例
   作者:張凱慶
   時間:西元 2013 年 4 月 */


編譯執行,結果如下



中英文術語對照
屬性property
方法method
類別class
子類別subclass


您可以繼續參考
類別


相關目錄
Objective-C 快速導覽
Objective-C 教材
首頁



參考資料
Programming with Objective-C: About Objective-C
Programming with Objective-C: Working with Objects

沒有留言: