基礎クラス (NSString など) の .m ファイルが利用できないため、同じクラスで宣言されたカテゴリの .m ファイル内で拡張子を宣言できるかどうかを考えていました。内部でインスタンス変数を使用しないプライベート メソッドの作成に成功しました。しかし、インターフェイス内で宣言された iVar にアクセスしようとすると、問題が発生しました。
※これは特に目的はなく、ただ試してみただけです。
私がしたことは、次のカテゴリを宣言することでしたNSString
:
NSString+TestInterface.h
@interface NSString (TestInterface)
@end
NSString+TestInterface.m
@interface NSString () {
NSString *myVar;
}
@property (strong) NSString *myVar;
-(void)myPrivateMethod;
@end
@implementation NSString (TestInterface)
-(void)myPrivateMethod{
myVar=@"random";
// [self setValue:@"check" forKey:@"myVar"];
NSLog(@"Private %@",myVar);
// NSLog(@"Private %@",[self valueForKey:@"myVar"]);
}
@end
この方法で実行すると、次のコンパイラ エラーが発生します。
アーキテクチャ x86_64 の未定義シンボル:
"_OBJC_IVAR_$_NSString.myVar"、参照元: -[NSString(TestInterface) myPrivateMethod] in NSSTring+TestInterface.o ld: アーキテクチャ x86_64 のシンボルが見つかりません
誰かが何が起こっているのか教えてもらえますか?