2013-10-21 50 views
0

我有很多我的項目使用的一堆類。其中一些類必須訪問我創建的其他特殊類。因爲我想讓這些類獨立於其他類,所以我不想讓#import行跨越不屬於同一類的導入類。我想訪問這些類的信息,而不必使用#import行。構建自包含類

蘋果有一些特殊的東西,可以訪問,而無需導入任何東西。例如:

[[UIApplication sharedApplication] delegate] 

[[UIScreen mainScreen] bounds] 

如何創建類這樣的。類,我可以簡單地做一個

[[MyClass sharedClass] property] 

[[MyClass sharedClass] runThis] 

,並有機會獲得它。沒有任何#import行。

注意,因爲我不是在談論一個普通的單身人士。單身人士,你還必須導入其文件。

這可能嗎?

+0

您通過適當的設計讓類彼此「分離」,而不是通過不導入必需的標題。 – CouchDeveloper

回答

2

之所以看不到這些類的導入是因爲你有UIKit框架爲你的項目,該項目有效地導入這些類.h文件到您創建的每個類的一部分。然而,通過利用objective-c中的動態分派和動態類型,可以做到你所描述的內容,但是,在分離方面,你將失去編譯時錯誤檢查。 。

例如,我的UIApplication委託與名稱的NSManagedInstance屬性的子類「managedObjectInstance我不導入該子類的.h文件中,而是使用valueForKey:方法如下所示:

[((NSObject*)[UIApplication sharedApplication].delegate) valueForKey: @"managedObjectContext"]; 

NSObject強制轉換僅僅是因爲sharedApplication的委託屬性是一個id,這意味着它不一定符合KVO。要調用一個你知道存在於某個類中的方法而不會引發警告,可以使用performSelector:像這樣的功能家族

[objectOfSomeClassWeDidntImport performSelector: @selector(amethodWeKnowExists)] 
+0

好吧,這可能接近我想要的,但你正在訪問委託上的變量。你如何在隨機課上訪問某些東西(財產,方法或伊維爾)? – SpaceDog

+0

屬性,你會通過KVO做,就像我在第一個例子中說的那樣; managedObject是這種情況下的一個屬性。看到我的編輯你的下一個問題。我從來沒有遇到過一個ivar的場景......但是再一次,你如何在沒有方法的情況下從課堂外首先獲得它? –

+0

我認爲這可以做到這一點。謝謝 – SpaceDog

1

你可以做到這一點....

只是讓你進口projectName-Prefix.pch文件

和無論你想使用導入文件的內容。

您可以在Resources文件夾中找到.pch文件。

相關問題