標籤:
成員變數,本例中的是執行個體成員變數,是作用於整個類對象內的。從生命週期來看,它比局部變數要長一些,但它預設是私人的,其他對象是無法訪問到的。
比如你一個變數放在@interface 中,你申請一個實體時,變數存活周期跟你實體一樣。
因為成員變數的範圍是整個類對象內,所以在ARC環境下OC裡面的成員變數應該是 strong屬性的。
連結:http://www.zhihu.com/question/23347971/answer/24332408
例子:
標頭檔:
@interface ViewController : UIViewController{ //成員變數 NSArray *array1;}//屬性變數@property (nonatomic,strong) NSArray *array2;@end
源檔案:
- (void)viewDidLoad{ [super viewDidLoad]; array1 = [[NSArray alloc] initWithObjects:@"abcde", nil]; array2 = [[NSArray alloc] initWithObjects:@"123abc", nil]; {// 局部變數 NSArray *array1 = [[NSArray alloc] initWithObjects:@"12345", nil]; } NSLog(@"\narray1 : %@\n array2 : %@",array1,array2);}
我的理解是:
局部變數是根據其生存周期定義的,在源檔案中的array1,其生命週期是在以“{ }”為界限的代碼塊中,雖然它的名稱與成員變數相同,但不是同一個變數。成員變數是用於一個地區內的臨時變數。
成員變數,本例中的是執行個體成員變數,是作用於整個類對象內的。從生命週期來看,它比局部變數要長一些,但它預設是私人的,其他對象是無法訪問到的。因此,一般自訂方法,作為一個介面讓其他對象訪問這個變數。因此,成員變數用於類內部,無需與外界接觸的變數。
根據成員變數的私人性,為了方便訪問,所以就有了屬性變數。屬性變數的好處就是允許讓其他對象訪問到該變數。當然,你可以設定唯讀或者可寫等,設定方法也可自訂。所以,屬性變數是用於與其他對象互動的變數。
目前我是這麼理解的,希望對你有協助。
成員變數和屬性變數是完全一樣的,別被obj-c 2.0的靈活寫法給誤導了。
但是屬性變數可以作為方法名字,也就是可以有其他名字。
http://www.cocoachina.com/bbs/read.php?tid-245245.html
看到一篇文章:
ios中的成員變數定義在@interface 和@implementation 中的區別是什嗎? ios中的成員變數定義在@interface 和@implementation 中的區別是什嗎?
@interface 中是成員變數
@implementation 是全域變數
範圍和存活區間的問題
比如你一個變數放在@interface 中,你申請一個實體時,變數存活周期跟你實體一樣
在@implementation 中,因為是全域,所以一直存在
非常感謝!
還想瞭解下,具體的範圍的區別是什嗎?
範圍,就是這個變數在存活地區,
比如說成員變數,就是放在@interface,作用域是類裡面
全域變數,是整個程式
臨時變數一般是函數內
@implementation testClass{
UIView *_test;
}
這樣的變數應該不是全域的吧?
@implementation testClass{ UIView *_test; }
這個情況比較少個,不推薦,這個情況是成員變數
但是預設是@private
其實都是成員變數,放在@implemetation裡的是私人的而已。
都是成員變數,只是放在@implemetation中的變數無法被子類繼承
iOS OC 成員變數是強引用還是弱引用