두 개의 속성을 선언하는 클래스가 있습니다.읽기 전용 속성이 약한 경우 어떻게 런타임에 확인할 수 있습니까?
@property (nonatomic, readonly, weak) id first;
@property (nonatomic, weak) id second;
내가 속성의 속성 확인하기 위해 런타임에 다음 코드를 사용 : 문서에서 분명히
attributes of property are [email protected],R,N,V_first. Weak? 0
attributes of property are [email protected],W,N,V_second. Weak? 1
https://developer.apple.com/library/mac/documentation/cocoa/conceptual/objcruntimeguide/articles/ocrtpropertyintrospection.html을에서 : 불행하게도
unsigned int propertyCount;
objc_property_t *properties = class_copyPropertyList(class, &propertyCount);
for (int propertyIndex = 0; propertyIndex < propertyCount; propertyIndex++) {
objc_property_t property = properties[propertyIndex];
const char *rawName = property_getName(property);
NSString *propertyName = [NSString stringWithCString:rawName encoding:[NSString defaultCStringEncoding]];
BOOL isWeak = [self propertyIsWeak:property];
char const *attributes = property_getAttributes(property);
NSString *attributesString = [NSString stringWithCString:attributes encoding:[NSString defaultCStringEncoding]];
NSArray *attributesArray = [attributesString componentsSeparatedByString:@","];
BOOL weak = [attributesArray containsObject:@"W"];
NSLog(@"attributes of property are %@. Weak? %d", attributesString, weak);
}
을, 나는이 결과를 얻을 수 첫 번째 속성에도 'W'가 있어야하지만 그렇지 않습니다. 누구든지이 속성이 실제로 약한 것을 감지하는 방법을 알고 있습니까?
약한 것으로 선언된다는 점에 유의하십시오. 컴파일러는이를 적절하게 취급하고 적절하게 처리합니다.
이것은 버그처럼 보입니다.하지만 실제로 작동하는 방법이 필요합니다.
호기심이 ... 런타임에 이것을 결정해야하는 이유가 무엇입니까? 왜 당신이 확인할 수있는 것이 중요합니까? – Gavin
나는 여기서 W는 쓰기를 의미한다고 생각한다. 나는 읽고 쓰는 것을 의미한다. 약하지 않다 – santhu
@santhu 링크를 방문하면 W가 약자임을 나타냅니다. 그리고 @MicahHainline 나는 이것이 읽기 쉽고 약한 속성을 가질 수 없다고 말하고 있습니다. 어셈블리에서 'first'속성을 확인하고 'weak'이 있거나없는 코드에 차이가 있는지 확인하십시오. – Gavin