2011-11-24 153 views
1

我期待在蘋果的MVC Networking sample project,我發現,在類PhotoGallery筆者創建的方法abandonGalleryCacheAtPath:的實例和類版本的同一個名字:類和實例方法與

線139:

+ (void)abandonGalleryCacheAtPath:(NSString *)galleryCachePath 

線457:

- (void)abandonGalleryCacheAtPath:(NSString *)galleryCachePath 

方法的所有實例的版本似乎做是有點採伐befo重新調用類方法如下:

[[QLog log] logWithFormat:@"gallery %zu abandon '%@'", (size_t) self.sequenceNumber, [galleryCachePath lastPathComponent]]; 
[[self class] abandonGalleryCacheAtPath:galleryCachePath]; 

日誌消息包括self.sequenceNumber,這是這將不會提供給類方法的一個實例變量。

幾個問題:

  1. 會將系統自動直接調用正確的方法例如如果另一個方法調用self abandonGalleryCacheAtPath:abc那麼方法的類版本將被執行,如果另一個實例方法調用它,那麼方法的實例版本將被執行?
  2. 您是否認爲作者已經實施了純粹的實例方法,以便可以記錄sequenceNumber的值?做這種雙重實施還有其他設計/技術好處嗎?

回答

2

由於Objective C使用動態方法綁定,系統將根據調用的上下文自動將調用引導至Class或Instance方法。請參考Objective-C uses dynamic binding, but how?

+0

感謝您的解釋 - 它回答了我的第一個問題。你對第二個有什麼想法嗎? –