#ios #objective-c
#iOS #objective-c
Вопрос:
У меня есть некоторый код, подобный этому:
@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, SEL, long, id, bool, bool);
static void _I_Person_setCjmName_(Person * self, SEL _cmd, NSString *cjmName) {
objc_setProperty (self, _cmd, __OFFSETOFIVAR__(struct Person, _cjmName), (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, SEL _cmd, NSNumber *cjmAge) {
(*(NSNumber **)((char *)self OBJC_IVAR_$_Person$_cjmAge)) = cjmAge;
}
Я хочу знать, почему proprety(atomic,strong)
не вызывается objc_setProprety
, если оно не вызывает objc_setProprety
или другую подобную функцию objc_setProprety_atomic
, как оно может вызывать reallySetProperty
и блокировать function setCjmAge
.
Спасибо всем, кто мне помогает.