@interface TestObj :NSObject
@property(copy, nonatomic)NSString *name;
@end
@implementation TestObj
- (void)testName{
NSLog(@"name:%@",self.name);
}
@end
@interface ViewController()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
id tclass =[TestObj class];
void * vid = &tclass;
[(__bridge id)vid testName];
}
@end
ログ:iOSのクラスメソッド
私の理解では、なぜtestName
インスタンスメソッドに直接送信することができます
vid
vid
が
TestObj
クラスオブジェクトのアドレスへのポインタです
name: <ViewController: 0x7ff3584b6580>
?
さらに、testName
メソッドがNSLog
を呼び出す理由が、nilではなく<ViewController: 0x7ff3584b6580>
を出力する理由は何ですか?
はありがとうございました。
クラスへのポインタに対してインスタンスメソッドを呼び出すことは本当に奇妙です。 'testName'をインスタンスメソッドではなくクラスメソッドに変更するとどうなるか見てみましょう。 – rmaddy
- [TestObj testName]:インスタンスに送信された認識できないセレクタ – WENHUI