這是我在我的班級我的一個實現文件...這個分類爲什麼起作用?範疇與類擴展
代碼設置#1
@interface MyViewController (PrivateMethods)
- (NSString *)myPrivateMethod;
@end
@implementation MyViewController
- (void)viewDidLoad
{
NSString *myString = [self myPrivateMethod];
NSLog(@"%@", myString);
}
- (NSString *)myPrivateMethod
{
return @"someString";
}
@end
有了這個代碼,一切正常,並記錄「someString 」。
但不應該我的代碼看起來不同?我實際上是偶然使用這一類(我有複製/粘貼的東西,沒有注意到「PrivateMethods」在那裏;我打算使用類擴展)。
應該不是我的代碼實際上看起來像下列之一:
代碼設置#2
@interface MyViewController()
- (NSString *)myPrivateMethod;
@end
@implementation MyViewController
....
或者:
代碼設置#3
@interface MyViewController (PrivateMethods)
- (NSString *)myPrivateMethod;
@end
@implementation MyViewController (PrivateMethods)
....
什麼這種情況背後的細微差別是什麼?代碼設置#1與代碼設置#2有什麼不同?
編輯:有關安裝程序#3
是什麼設置它像這樣完成的問題?這是否會「工作」?
@interface MyViewController (PrivateMethods)
- (NSString *)myPrivateMethod;
@end
@implementation MyViewController
- (void)viewDidLoad
{
NSString *myString = [self myPrivateMethod];
NSLog(@"%@", myString);
}
@end
@implementation MyViewController (PrivateMethods)
- (NSString *)myPrivateMethod
{
return @"someString";
}
@end
用另一個關於安裝程序#3的問題更新我的問題。非常感謝! – MikeS
我認爲在這種情況下(最近的)Clang會將另一個未聲明的方法的定義視爲同一個「@實現」的聲明也是很重要的。 –
我「有點」意識到喬希。這是否僅僅是新的Xcode? – MikeS