2012-04-06 1 views

ответ

4

Предположим, вы хотите добавить функциональность в существующий класс (exp: NSString). Вы можете сделать это, создав подкласс или вы можете использовать категорию. И обычно называют файл, где категория определена с использованием шаблона: MyClass+MyCategory.h.

Например, мы можем добавить метод reverseString к классу NSString в категории:

// File NSString+reversable.h 
- (NSString *)reverseString; 

// File NSString+reversable.m 
- (NSString *)reverseString 
{ 
    // Implementation 
} 

Посмотрите на эту documentation для получения дополнительной информации о категориях.

Затем вы можете использовать эту категорию в другом классе:

#import "NSString+reversable.h" 
// ... 

NSString *aString = @"Hello!"; 
NSString *reversedString = [aString reverseString]; 
4

Знака «+» в заголовке/источнике именах файлов - по соглашению - используются для описания Category реализаций.

Пример:

Допустим, вы хотите, чтобы добавить некоторые функциональные возможности существующего класса (e.g.the NSString класса). (NSString+Utilities.h)

// NSString+Utilities.h 

@interface NSString (Utilities) 
-(NSString *) doSthWithThisString; 
@end 

// NSString+Utilities.m 

@implementation NSString (Utilities) 

-(NSString *) doSthWithThisString 
{ 
    NSMutableString *transformedStr = [self copy]; 

    // Do sth 

    return transformedStr; 
} 

@end 

С его помощью:

// in another file 

#import "NSString+Utilities.h" 

- (void)awakeFromNib 
{ 
    NSString* myString = @"This is a string"; 

    // you may use our new NSString method as much as any already-existing one 
    NSString* newString = [myString doSthWithThisString]; 
} 

Ссылка:

+0

лол, мы оба использовали 'расширение NSString' в качестве примера. +1 для полного объявления расширения. – sch

+0

@sch Hahaha ... Да, действительно; это довольно типичный пример (и его легко получить), не так ли? –