Вопрос про категории
От: XJess  
Дата: 10.08.11 07:59
Оценка:
Привет всем!
В двух книгах (правда, на русском, то бишь переведенных) я прочла, что с помощью категории можно заместить метод в классе. Так вот — решила провести эксперимент.

Есть такой код:

Файл Сat.h:


#import <Foundation/Foundation.h>

@interface Cat : NSObject
{
@private
    int weight;
    int birthday;
}
- (NSString *)description;
- (void) Tail;
@end


Файл Cat.m:

#import "Cat.h"

@implementation Cat

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
        weight = 65;
    }
    
    return self;
}

- (void) TailImpl
{
    NSLog(@"Cat's tail");
}

- (void) Tail;
{
    [self TailImpl];
}

- (NSString *)description
{
    return @"Big, fat Cat";
}

@end


Файл main.m:


#import <Foundation/Foundation.h>
#import "Cat.h"

@interface Cat (Crack)
- (int) weight;
@end

@implementation Cat (Crack)

- (int) weight
{
    return weight;
}
@end

@interface NSObject (Crack)
- (NSString*) description;
@end

@implementation NSObject (Crack)
- (NSString*) description
{
    return @"Crazy Cat";
}
@end

int main (int argc, const char * argv[])
{

    @autoreleasepool
    {
        Cat* cat = [Cat new];
        [cat Tail];
        NSLog(@"%d", [cat weight]);
        
        NSNumber* pNum = [NSNumber numberWithInt:10];
        // insert code here...
        NSLog(@"%@", cat.description);
        
    }
    return 0;
}


Так вот — в этой программе я попыталась заместить метод description с помощью категории. (В принципе NSLog и так должен вызвать description, но я для ясности решила дернуть его здесь руками.)
Но в итоге выводится совсем не то, что я ожидала:

Cat's tail
65
Big, fat Cat


Вопрос — так можно все-таки заместить или книга врет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.