Представьте меня определить класс MyClass следующим образом:Необъявленные Методы против Категории в Objective-C
Файл интерфейса класса:
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
@property (nonatomic) NSString *myProperty;
- (void)myPublicMethod;
@end
Файл реализации класса с использованием категорий:
#import "MyClass.h"
@interface MyClass (MyCategory)
- (void)myPrivateMethod;
@end
@implementation MyClass
- (void)myPublicMethod {
NSLog(@"myPublicMethod was called!");
[self myPrivateMethod];
}
- (void)myPrivateMethod {
NSLog(@"myPrivateMethod was called!");
}
@end
Файл реализации альтернативного класса НЕ с использованием категорий:
#import "MyClass.h"
@ implementation MyClass
- (void)myPublicMethod {
NSLog(@"myPublicMethod was called!");
[self myPrivateMethod];
}
- (void)myPrivateMethod {
NSLog(@"myPrivateMethod was called!");
}
@end
Хотел, чтобы кто-то мог объяснить разницу между двумя подходами к файлу реализации.
В случае, если использование категорий означает, что «частные» методы унаследованы любыми подклассами MyClass и не используют категории, означает, что «частные» методы - это , а не, унаследованные любыми подклассами?
нет разница. (если вы не играете с низкоуровневым ObjC api, который все еще может не иметь разницы) –
Если я подкласс MyClass, где MySubclass является подклассом MyClass. Интересно, что MySubclass не может напрямую ссылаться на myPrivateMethod MyClass независимо от того, использует ли MyClass категории или нет. Это имеет смысл, я думаю, поскольку публичный интерфейс MyClass объявляет только один метод myPublicMethod. – Steve