Objective-C用關鍵字interface實現私有方法


Objective-C中的類本身並沒有私有方法這個概念,聲明在 .h 文件中的方法都是公有的。不過,要想實現私有方法的效果還是有辦法的,就是用Category。
// Hello.h
#import
@interface Hello : NSObject {
    //變量聲明
}
// 方法聲明
@end
//

// Hello.m
#import "Hello.h"
@interface Hello () //=>此處Hello命名一致,後邊跟括號
//=>@property (某種) aType ivarName ; 可實現私有變量
// 私有方法聲明


- (void)test;
@end


@implementation Hello
// 私有方法實現
//=>@synthesize ivarName; 有私有變量的話
- (void)test {
// ..
}
// 方法實現
@end
在上面這個例子中,test 就是 Hello 類的“私有方法”了。再次證明,Category這個東東真的很強大~

下面是網上一博主的部分內容:
在面向對象的開發中,一個很重要的原則就是不要暴露不需要暴露的東西。 在Objective-C中,在頭文件中你只能聲明類方法和實例方法,這意味着你所有的方法都要暴露在外邊。
其實在Objective-C中也可以來聲明一個私有方法,這個方法只有本類可見,其他任何類都看不到,即使是繼承於這個類的其他子類也無法看到。 方法也比較簡單。
@interface Controller : NSObject
{
    NSString *something;
}
+ (void)thisIsAStaticMethod;
- (void)thisIsAnInstanceMethod;
@end

@interface Controller (Private)
- (void)thisIsAPrivateMethod; 
@end
只要在頭文件或者實現類裏面添加一個interface,這個Interface的名字跟頭文件裏面的一樣,只是後面加上了(Private)。現在在這個interface中聲明的方法就是私有方法了。
此前是在一博客上看到的,但是發現這個更像是Objective-C中的類目(Category):
2、類目(Category):
類目是Objective-C中最有用的一個特性。實質上,類目允許你爲一個已存在的類添加一些方法而不用子類化該類,也不需要你瞭解該類的實現細節。
這是特別有用的,因爲你可以給一個內建的對象添加方法。當你想在你的應用程序裏面給所有NSString類型的實例添加一個方法,你只需要添加一個類目,而不需要通過定義一個子類來添加該方法。
比如,我想給NSString添加一個方法以判斷它是不是一個URL,寫法就像這樣:
#import
@interface NSString (Utilities)
- (BOOL) isURL;
@end
這很像一個類的聲明。不同的地方在於後面沒有列出父類,並且在括號裏面寫了類目的名稱。類目的名字可以隨便取,但是最好能表達出你在類目中包含的方法所要做的事。
下面是一個實現。切記,這不是很好的檢查URL的方法。我們只是爲了說清楚類目的概念。
#import "NSString-Utilities.h"
@implementation NSString (Utilities)
- (BOOL) isURL
{
    if ( [self hasPrefix:@"http://"] )
        return YES;
    else
        return NO;
}
@end
現在,你可以使用NSString的這個方法了,下面的代碼會在控制檯打印“string1 is a URL”:
NSString* string1 = @"http://pixar.com/";
NSString* string2 = @"Pixar";
if ( [string1 isURL] )
    NSLog (@"string1 is a URL");
if ( [string2 isURL] )
    NSLog (@"string2 is a URL");
與子類不同,你不能通過類目來添加實例變量。但是你能通過類目重寫(override)類中已經存在的方法,當然,重寫的時候要特別小心。
記住,當你通過類目更改一個類的時候,這個更改會影響你這個應用程序中所有這個類的實例。
原文鏈接:http://blog.csdn.net/sillyboytao/article/details/7671809
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章