日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Objective-C成员变量声明方式探究

發(fā)布時間:2024/7/23 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Objective-C成员变量声明方式探究 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、@interface和 @property 方式聲明變量的區(qū)別
1.你可以單獨(dú)在@interface中定義變量,而不用@property定義;也可以只用@property去定義,而不在@interface中定義,當(dāng)然用了@property去定義,一般要在.m文件中用@synthsize去合成相應(yīng)的setter,getter方法。否則會得到一個警告。
2.那這兩種方式有什么區(qū)別呢。(1)只在@interface中定義變量的話,你所定義的變量只能在當(dāng)前的類中訪問,在其他類中是訪問不了的;而用@property聲明的變量可以在外部訪問。(2)用了@property去聲明的變量,可以使用“self.變量名”的方式去讀寫變量。而用@interface的方式就不可以。
二、存取器和變量
1.問題:我們在進(jìn)行iOS開發(fā)時,經(jīng)常會在類的聲明部分看見類似于下面的情況:? @property (strong, nonatomic) UIWindow *window;?? @synthesize window = _window; 的語句,? 那么,這個window是什么,_ window又是什么?
2.答案和解釋:(1)@synthesize window = _window; 意思是說,window 屬性為 _window 實例變量合成訪問器方法。(2)更具體的解釋:根據(jù)上面語句,編譯器生成的存取方法應(yīng)該是:setWindow和getWindow。但是存取方法操作的變量是_window,實際上操作的變量始終是_window。(3)根據(jù)上面的語句,編譯器會自動生成一個_window成員變量。如果現(xiàn)在在@interface中再顯示聲明一個_window成員變量,實際上效果是一樣的。但是如果在@interface中添加一個window成員變量,會同時存在window和_window兩個成員變量,其中_window可以被外部訪問,而window不能。(4)如果這樣寫:@synthesize window;則編譯器生成的存取器名稱和變量名是一致的,編譯器會自動生成window變量,如果此時同時在@interface中添加window成員變量,效果也是一樣。
3.通過這個看似是賦值的這樣一個操作,我們可以在@synthesize中定義與變量名不相同的getter和setter的命名,借此來向外部隱藏成員變量,防止被不正常使用,規(guī)范使用者使用存取器來操作變量。
4.通過以上分析,做一下使用總結(jié):(1)如果要建立一個私有變量,不對外公開,則將變量聲明在@interface中,不寫@property和@synthesize。(2)如果要建立一個公開的變量,則使用@property和@synthesize來聲明變量,不用再在@interface中聲明變量,因為變量是自動生成的。如果要讓變量名和存取器名不一致,以此來隱藏變量,則使用類似@synthesize window = _window;的代碼。
5.默認(rèn)的getter的方法名是和變量名一樣的,當(dāng)我們的變量是一個形容詞的時候,比如是否可見,visible,setter方法名為setVisible,getter方法名為visible,而我們希望getter方法名為isVisible,則可以使用下面的方式:@property(nonatomic,getter=isVisible) BOOL visible;同樣的也可以設(shè)置setter方法名,示例:@property(nonatomic,setter=setVisible:) BOOL visible;
三、在實現(xiàn)文件中聲明全局變量
1.示例代碼:@implementation Fraction{? ?int? numerator;
?? int? denominator;
}

2.類似于在實現(xiàn)文件中聲明的方法一樣,聲明的變量為私有變量。
四、XCode4.5新特性
1.在xcode4.5以前,當(dāng)我們想為類添加一個新的公開屬性,一般都要寫@property和@synthesize,但是在Xcodexi4.5之后,synthesize現(xiàn)在會對應(yīng)property自動生成。
2.默認(rèn)行為下,對于屬性foo,當(dāng)沒有寫相應(yīng)的synthesize的時候,編譯器會自動補(bǔ)全synthesize,方式如下:@synthesize foo = _foo。也就是說,默認(rèn)的變量名是_xxxxx,如果不希望這樣,就只能手動寫synthesize了,比如:@synthesize foo;

總結(jié)

以上是生活随笔為你收集整理的Objective-C成员变量声明方式探究的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。