问题描述
我有一些类似这样的代码:
@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 (将#修改为@)