我是目標 c 的新手。我在類的 .h 頭檔案中創建了一個屬性,然后我進行了合成。
之間有什么區別
@synthesize propertyname;
和
@synthesize propertyname = _propertyname;
兩者都有效,但使用第一個或第二個的目的是什么。
任何幫助表示贊賞。
uj5u.com熱心網友回復:
首先,你不需要再寫@synthesize propertyname了。
在 Objective-C 中,當你宣告一個屬性時,編譯器會默認為你自動生成它的訪問器方法。如果屬性既是讀屬性又是寫屬性,則這些訪問器方法可以是 getter 和 setter,如果它是只讀屬性,則只能是 getter。
編譯器在這些訪問器方法實作的底層使用內部變數(稱為 iVar)。(您顯然可以提供您自己的這些訪問器方法的實作,也可以提供您自己的內部變數)
是有什么區別@synthesize propertyname;和@synthesize propertyname = _propertyname;
當您宣告@synthesize propertyname;編譯器自動生成并使用iVar命名propertyname并在其默認訪問器實作中使用它時,您也可以propertyname在.m檔案中使用它,因為編譯器已經為您宣告了它。
property = @"abcd";
當您宣告@synthesize propertyname = _propertyname;編譯器自動生成并使用命名的 iVar_propertyname并在其默認訪問器實作中使用它時,您也可以_propertyname在.m檔案中使用它,因為編譯器已經為您宣告了它。
_property = @"abcd";
從廣義上講,這兩個陳述句之間的一般區別只是名稱的變化iVar(盡管用法不同)
使用第一個或第二個的目的是什么。
正如我已經提到的,您不需要在正常用例中使用它們中的任何一個。編譯器已經為你做到了。
我們曾經寫過,@synthesize propertyname;當我們對特定屬性的名稱既沒有任何特定保留ivar也不想提供我們自己的私有變數時ivar(在下面詳細解釋)。這比顯式指定名稱更簡單iVar,我們知道編譯器會ivar為我們生成一個與屬性名稱相同的名稱。
我們通常@synthesize propertyname = _propetyname在@synthesize propertyname;不可用時或當我們希望iVar遵循特定的命名法('_' 跟隨屬性名稱)或當我們想對屬性使用我們自己的私有變數時撰寫iVar。
在這兩種情況下@synthesize都很方便,因為它可以讓我們免于撰寫像添加setter和getter宣告屬性的方法這樣的樣板代碼。
如何將自定義變數用作ivar屬性?
@interface SynthesizeExplorer : NSObject
@property (nonatomic,strong) NSString *name;
@end
@implementation SynthesizeExplorer
NSString *blaBlaName;
@synthesize name = blaBlaName;
@end
如果您查看 ,implementation您將看到該屬性name由一個名為的內部變數支持,blaBlaName而不是由典型的編譯器生成的 ivar 支持,例如name或_name。
到今天為止,我看到的唯一原因是@synthesize當您想使用自定義內部變數來支持您宣告的屬性時。否則,我沒有看到任何一點書面既不@synthesize propertyname;或@synthesize propertyname = _propertyname;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/329173.html
下一篇:如何使用目標C將使用captureOutputdidFinishProcessingPhoto拍攝的影像轉換為要存盤在JSON中的字串
