2012-03-05 53 views
1

我在Objective-C的相當新的,我有一個問題:在特定情況下Obj-c類別的用途。

我經歷過一些蘋果的示例代碼,發現如下:

https://developer.apple.com/library/ios/#samplecode/GLSprite/Listings/Classes_EAGLView_m.html#//apple_ref/doc/uid/DTS40007325-Classes_EAGLView_m-DontLinkElementID_4

在的頂部文件,我發現使用Objective-C類別

@interface EAGLView (EAGLViewPrivate) 

- (BOOL)createFramebuffer; 
- (void)destroyFramebuffer; 

@end 


@interface EAGLView (EAGLViewSprite) 

- (void)setupView; 

@end 

就在那之後,開始執行EAGLView類。

這裏類別的真正目的是什麼,因爲上面的3個函數也可以直接在頭文件中定義??

THX

回答

6

正如聲明中.m文件這些方法的第一類的名稱(「EAGLViewPrivate」)顯示爲模擬私有方法的一種方式。 Objective-C對私有方法沒有真正的支持,但由於這些沒有在.h文件中聲明,因此編譯器會在.m文件之外的代碼被聲明的地方試圖調用它們時發出警告。

如今,類擴展(類別的一個特殊情況)更常用,主要是因爲在類的@implementation塊中未實現「private」方法時,使用類擴展會導致編譯器警告。類擴展是Objective-C 2.0中的一項新功能,因此在舊代碼中,您經常會看到名稱中包含私有的類別,就像您發佈的代碼中一樣。意圖是一樣的。

+0

Thx爲明確的答案。但是,你有什麼想法,爲什麼,2個不同的類別,而不是1? – 2012-03-05 17:10:20

+0

我不確定該代碼意圖的作者是什麼。最有可能的是,它只是通過函數組織方法來使代碼更具可讀性的一種方式。在有很多私有方法的情況下,將相關方法的組分開可以使代碼閱讀和重構更容易。也就是說,我只是使用註釋和'#pragma mark'來自己做。 – 2012-03-05 17:40:46

+0

好的thx爲你的時間。 – 2012-03-05 21:01:44