2012-09-09 66 views
2

三類問題:使用類別覆蓋NSURL方法

我想放在NSURL一類是,做其他的事情當中,覆蓋了查詢方法能夠提供從URL的查詢字符串不符合RFC 1808。難道是合法的,做這樣的事情在我的類別:

- (NSString *)query //real NSURL method 
{ 
    if (stringIsRFC1808) //want to get the default implementation 
      return [super query]; 
    else 
      return somethingElse; //want to get my custom implementation 
} 

感謝

回答

6

這個代碼是無效的,因爲你使用的是[super query] - 這並不完全符合你的期望。類別不是超類。這裏[super query]將嘗試調用- [NSObject query] - BOOM無法識別的選擇器錯誤。如果您使用類別來擴展一個類,那麼您將無法調用原始方法 - 如果您不需要此功能,那麼使用類別就沒有問題,但如果您確實需要它,則應考慮子類化,(甚至可以更好地編寫Foundation objets)或使用Objective-C運行時執行method swizzling - 這樣您就可以訪問該方法的原始實現。

+3

downvote的原因是什麼?你是連續低估我嗎? – 2012-09-09 10:11:39

+1

@ H2C03看起來像今天有人不喜歡你。 –

+0

@FilipRadelic是的,對我來說也是......我反正把我的amswers標記爲mod注意。還要感謝那些賠償它的人。 – 2012-09-09 10:19:11

2

你不應該使用類別來覆寫現存方法。 類別用於增強沒有子類別的類行爲。 (雖然我認爲你可以覆蓋它,但是蘋果公​​司非常沮喪)

2

添加你自己的方法,不與蘋果sdk衝突。考慮一下你公司的某個人使用這個類別:他所做的第一件事就是研究開發人員庫以瞭解這種方法的作用。

導入類別後,它不會做它應該做的事情了。蘋果不推薦這個!