簡體   English   中英

如何在沒有子類化的情況下在構建的類中添加成員變量和方法

[英]how to add member variable and methods to in built class without subclassing it

如何在不對其進行子類化的情況下將成員變量和方法添加到構建的類(例如,NSString)中。

對於方法:您可以使用類別添加成員方法而無需子類化。 在Cocoa中,添加每個框架擴展方法是一種非常常見的做法。

例如變量:從Snow Leopard(Mac OS X 10.6)開始,您可以使用關聯引用 您可以使用它們來模擬向現有類添加對象實例變量。

Objective-C編程語言非常全面,可以用關聯的引用和類別來做。

“類別”允許您向現有類添加方法,但不添加成員變量。

請參閱本教程中有關它們的部分(在頁面中搜索): http//cocoadevcentral.com/d/learn_objectivec/或在其他任何地方查找Objective-C文檔中的類別。

您無法在沒有子類化的情況下添加實例變量。

你不能。 有時子類是個壞主意(例如,你可能正在使用類集群),所以人們經常通過創建一個全新的類(NSObject的子類,而不是所討論的類的子類)來解決這個問題。實例變量,其類型是有問題的類,以及所需的添加變量。

例如,如果你想用另一個名為“foo”的BOOL創建NSString的子類......

@interface StringWithFoo : NSObject
{
    NSString* string;
    BOOL foo;
}

...然后實現您需要的任何方法,或創建一個公共訪問器,以便您可以直接調用字符串上的方法,甚至使用花哨的運行時技巧來適當地轉發消息(如果您想要這樣做,請詢問一個新問題)。

松散地,這是裝飾器模式的一個例子。

您可以通過創建類別將成員方法添加到類而不進行子類化,但這不允許您添加成員變量。

雖然很多東西可以在運行時在objective-c中完成,但是在其他語言中無法完成(參見運行時引用 ),我真的不會建議將一個實例變量添加到現有類中。

你介意解釋你不想要子類的原因嗎? 子類或類別真的看起來是最好的事情。

暫無
暫無

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

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