@interface中的成員變量作用域
/*
局部變量有作用域、全局變量有作用域。所以成員變量當(dāng)然也有作用域。
成員變量的作用域分為四種:
@public\@private\@protected\@package
*/
/*
@public : 任何地方都能直接訪問(wèn)對(duì)象的成員變量。
@private : 只能在當(dāng)前類(lèi)中訪問(wèn)
@protected : 只能在當(dāng)前類(lèi)和其子類(lèi)中訪問(wèn),這是默認(rèn)方法
@package :
注意事項(xiàng):
1.需要注意的是這四個(gè)修飾符只能修飾成員變量,不能修飾方法。這和C++不一樣。
*/
1 #import <Foundation/Foundation.h>
2
3
4 @implementation Car : NSObject
5 {
6 int _age;
7 @public
8 int _fuck;
9 }
10
11 @end;
12
13 int main() {
14
15 Car * c = [Car new];
16 //c->_age = 10; // error: instance variable '_age' is private
17 c->_fuck = 20;
18 //NSLog(@"_age = %d", c->_age); // error: instance variable '_age' is private
19 NSLog(@"_fuck = %d", c->_fuck);
20 return 0;
21 }
22
23 /*
24 總結(jié):
25 在implementation的注意事項(xiàng)
26 1.默認(rèn)為private屬性,所以不能用->直接訪問(wèn)。
27 2.可以用成員變量修飾符。
28
29
30 分析:但是如果@implementation不是直接寫(xiě)在main函數(shù)前面,那么
31 其實(shí)我們是無(wú)法知道其提供給外部的這個(gè)對(duì)象有這種成員變量。不管其是否是@public
32 都無(wú)法訪問(wèn),所以
33 3.寫(xiě)在@implementation的成員變量,如果這個(gè)@implementation不在main函數(shù)前面,那么相當(dāng)于是沒(méi)有的。
34 只有在@implementation前面,才用必要考慮1、2兩條。
35 */