如何在Objective-c中將類中的單個方法制作爲private?如何使一個類中的單個方法在Objective-c中隱藏?
回答
嚴格來講,你不能在Objective-C中創建私有方法;但是您可以在包含實現(MyClass.m
)的文件中創建一個類別,將其從頭文件(MyClass.h
)中隱藏。
//MyClass.h
#import <Foundation/Foundation.h>
@interface MyClass : NSObject {
}
@end
實現文件:
//MyClass.m
@interface MyClass()
- (void)myPrivateMethod;
@end
@implementation MyClass
- (void)myPrivateMethod {
return;
}
@end
的Objective-C不支持私有方法的原生設計。
但是,您可以通過使用「類擴展」(匿名類別)來實現私有方法控制。
基本的想法是在你的類的實現文件(不是它的頭文件)中聲明一個你的私有方法的類擴展,但是在你的@implementation塊之外。然後,您可以實施這些方法,並且任何外部課程都無法看到它們。就像這樣:
@interface MyClass()
- (void)myPrivateMethod;
@end
@implementation MyClass
- (void)myPrivateMethod
{
//implementation goes here
}
-(void)someOtherMethod
{
[self myPrivateMethod];
}
@end
使用類擴展勢力你實現在主@implementation塊的方法,並要求其執行(很像,好像他們在標題的主要@interface塊被宣佈) 。不幸的是,由於Objective-C的動態特性,這實際上並不會阻止這些方法被其他類調用。他們會得到一個警告,告訴他們該類可能不會對消息作出響應,但是在運行時會起作用。這給你的唯一的東西是能夠隱藏其他程序員的方法。
匿名類被稱爲*類擴展*。不同之處在於在主實現塊中必須聲明一個方法__。正常類別_可以單獨使用,在主要實現塊中甚至根本不需要。 – 2010-03-03 11:45:49
我已更正答案。謝謝。 – Jasarien 2010-03-03 12:12:59
Objective-C中沒有私有方法的概念。但是,您可以執行的操作是在頭文件中提供方法,並在私有文件中添加類別。
這通常是上下這樣的:
@interface MyObject : NSObject {
// ivars
}
// public methods
@end
// usually in a seperate file
@interface MyObject()
// private methods
@end
一個類別的一個空的名字意味着它是一個class extension,這告訴主執行塊所需的方法編譯器。
你不能。只有實例變量可以被標記爲私有。
雖然有辦法做一些等同於私人方法的東西。 一般的想法是,你不要在你的頭文件中聲明私有方法,而是在你的實現文件中聲明私有方法。
因此,如果你想有一個公共的(myPublicMethod)和私人(myPrivateMethod)方法,你是頭看起來是這樣的:
@interface MyClass {
}
- (void)myPublicMethod;
@end
然後,你還要爲你實現三個選項文件:
不要聲明該方法在任何@interface部分,只是確保它的實現它在@implementation部分在使用之前。
@implementation MyClass
- (void)myPrivateMethod { }
- (void)myPublicMethod {
[self myPrivateMethod];
}
@end
2.
在使用您的實現文件中聲明私有方法,並在主@implementation塊實現他們的匿名類。
@interface MyClass()
- (void)myPrivateMethod;
@end
@implementation MyClass
- (void)myPrivateMethod { }
- (void)myPublicMethod {
[self myPrivateMethod];
}
@end
使用您的實現文件常規類別和實施在一個單獨的@implementation塊中的私有方法。
@interface MyClass (PrivateMethods)
- (void)myPrivateMethod;
@end
@implementation MyClass (PrivateMethods)
- (void)myPrivateMethod { }
@end
@implementation MyClass
- (void)myPublicMethod {
[self myPrivateMethod];
}
@end
每種方法的優點/缺點都很好。 – 2010-03-03 16:08:21
- 1. 在ObjC中,我如何隱藏一個子類中超類方法的實現?
- 2. 如何在另一個類的面板中隱藏表單?
- 3. 在類中隱藏了一些方法
- 4. 如何從基類中隱藏方法?
- 5. 隱藏在一個通用的派生類的基類方法
- 6. 在.jar中隱藏一個類
- 7. 如何簡單地從ObjectiveC中的另一個類中更改類變量?
- 8. 一個類如何調用一個在單例類中定義的類方法?
- 9. 如何在eclipse中隱藏Content Assist中的超類方法?
- 10. 如何在通用約束類中使用方法隱藏(新)
- 11. 如何在一個類中調用另一個類的方法
- 12. 如何使用單個按鈕和單個操作方法顯示/隱藏UIPopoverController
- 13. 如何使用某個類中的另一個類的方法?
- 14. 'java.lang.Class.getDeclaredField()'的ObjectiveC中的類似方法'
- 15. Java如何擴展一個隱藏類
- 16. 在C++中隱藏一個特定功能的方法
- 17. 如何隱藏超類的方法?
- 18. 如何在Java中完全隱藏超類的方法
- 19. 如何僅在一個頁面中隱藏菜單欄
- 20. 如何在一個wordpress頁面中隱藏導航菜單?
- 21. 從dll中隱藏一個基類
- 22. java中的隱藏方法和類(Robotium)
- 23. 隱藏基類中的方法
- 24. 子類中的隱藏方法
- 25. 如何使方法在同一個類中調用另一個方法?
- 26. 如何隱藏F#中的方法?
- 27. 如何在另一個類中使用方法中的變量?
- 28. 如何使一個隱藏的GridView
- 29. 如何在Android中使用「隱藏類」?
- 30. 方法在Java中隱藏
你會想讀這個http://stackoverflow.com/questions/2158660/why-doesnt-objective-c-support-private-methods – bbum 2010-03-03 18:35:04