我知道使用類別覆蓋方法是一種令人沮喪的做法。儘管如此,我必須處理一些這樣做的代碼。當我運行下面的代碼時,我最初感到驚訝的是,在兩種情況下都調用了類別方法,但考慮鏈接器必須在鏈接時如何爲任何給定符號做出決定,這讓我感覺更好。在類別中重寫的方法是否總是優先於原始實現?
我的問題:假設除了我創建的其他類別不在其他類別中,我保證在我的類別中的實現始終是被調用的邏輯,只要它的標頭從某處導入?
someObject.h
#import <Foundation/Foundation.h>
@interface SomeObject : NSObject
- (void)doSomething;
@end
someObject.m
#import "SomeObject.h"
@implementation SomeObject
- (void)doSomething
{
NSLog(@"Original");
}
@end
someObject + Cat.h
#import <Foundation/Foundation.h>
#import "SomeObject.h"
@interface SomeObject (SomeObject)
- (void)doSomething;
@end
someObject + Cat.m
#import "SomeObject+Cat.h"
@implementation SomeObject (SomeObject)
- (void)doSomething
{
NSLog(@"New!");
}
@end
someObjectUser.h
#import <Foundation/Foundation.h>
@interface SomeObjectUser : NSObject
- (void)useSomeObject;
@end
someObjectUser.m
#import "SomeObjectUser.h"
#import "SomeObject.h"
@implementation SomeObjectUser
- (void)useSomeObject
{
[[SomeObject new] doSomething];
}
@end
Test.m
- (void)testExample
{
[[SomeObject new] doSomething];
[[SomeObjectUser new] useSomeObject];
}
結果
2013-02-28 11:32:37.417 CategoryExample[933:907] New!
2013-02-28 11:32:37.419 CategoryExample[933:907] New!
@NikolaiRuhe我不同意,這些問題是根本不同的。 – 2013-02-28 16:58:42
@MikeD問題有點不同,但答案對於這兩個問題都是有效的。 – Sulthan 2013-02-28 17:00:58
我確實已經先讀過這個問題,現在可以看到那裏有答案,但是指南說未定義的行爲「不太可能是一個問題」,這讓我想知道這裏是否有更多的見解。 。 – 2013-02-28 17:28:50