簡體   English   中英

使用Objective-C中的C宏來實現alloc-init

[英]Using C macros in Objective-C to alloc-init

這個問題出於好奇,而且對於我自己的娛樂而不是它是否是一個好主意,而是來自一個主要是C#/ JavaScript的背景,不斷在Objective-C中看到這個讓我覺得有點難看:

MyClass* myObj = [[MyClass alloc] init];

...我很好奇是否可以定義一個C風格的宏,以便可以將其轉換為:

MyClass* myObj = new MyClass;

......或者語法相似的東西。

有沒有人這樣做過或看過它呢? 隨意評論為什么它可能是一個可怕的想法(除了顯而易見的,它是非標准和不熟悉的),但這不會阻止我想知道它是否可以完成。 ;)

你當然可以做這個工作:

#define new(x) [[x alloc] init]
MyClass *myObj = new(MyClass);

如果你需要在沒有括號的情況下這樣做,我認為你運氣不好。

NSObject提供了一種new類方法。 所以你可以做到這一點,如果你碰巧更喜歡它:

MyClass *myObj = [MyClass new];

這是相關文檔的鏈接。

為什么要寫MyClass *myObj = new(MyClass); 如果你可以使用

#define createObject(className, objectName) className *objectName = [[className alloc] init]

createObject(NSObject, obj);

你的代碼肯定變得更不易讀。 然后,您可以為其他初始化程序(如initWith...:創建宏initWith...:

僅僅因為可以做某事,並不意味着應該這樣做。 編寫可讀代碼通常是個好主意,而不是短代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM