如何解决属性如何调用trueSetProperty
我有一些类似这样的代码:
@interface Person : NSObject
@property (atomic,copy) NSString* cjmName;
@property (atomic,strong) NSNumber *cjmAge;
@end
@implementation Person
@synthesize cjmName = _cjmName;
@synthesize cjmAge = _cjmAge;
@end
int main(int argc,const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc] init];
p.cjmName = @"J";
p.cjmAge = @22;
}
return 0;
}
当我使用clang
将它们转换为.cpp
代码时,我有以下提示:
// @synthesize cjmName = _cjmName;
extern "C" __declspec(dllimport) id objc_getProperty(id,SEL,long,bool);
static NSString * _I_Person_cjmName(Person * self,SEL _cmd) {
typedef NSString * _TYPE;
return (_TYPE)objc_getProperty(self,_cmd,__OFFSETOFIVAR__(struct Person,_cjmName),1);
}
extern "C" __declspec(dllimport) void objc_setProperty (id,id,bool,bool);
static void _I_Person_setCjmName_(Person * self,SEL _cmd,NSString *cjmName) {
objc_setProperty (self,(id)cjmName,1,1);
}
// @synthesize cjmAge = _cjmAge;
static NSNumber * _I_Person_cjmAge(Person * self,SEL _cmd) {
return (*(NSNumber **)((char *)self + OBJC_IVAR_$_Person$_cjmAge));
}
static void _I_Person_setCjmAge_(Person * self,NSNumber *cjmAge) {
(*(NSNumber **)((char *)self + OBJC_IVAR_$_Person$_cjmAge)) = cjmAge;
}
我想知道为什么proprety(atomic,strong)
不调用objc_setProprety
,如果不调用objc_setProprety
或诸如objc_setProprety_atomic
之类的其他函数,如何调用{{1} }并锁定reallySetProperty
。
感谢所有帮助我的人。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。