iOS
Objective-C 관련 객체
수색…
소개
iOS 3.1에서 Objective-C 런타임의 일부로 처음 소개 된 개체는 기존 클래스 개체에 인스턴스 변수를 추가하는 방법을 제공합니다 (하위 클래스 화).
즉, 서브 클래 싱없이 다른 객체에 객체를 연결할 수 있습니다.
통사론
void objc_setAssociatedObject (id 객체, void * 키, id 값, objc_AssociationPolicy 정책)
id objc_getAssociatedObject (id 객체, void * key)
void objc_removeAssociatedObjects (id 객체)
매개 변수
Param | 세부 |
---|---|
목적 | 수정할 기존 개체 |
키 | 이것은 기본적으로 상수 메모리 주소를 갖는 모든 포인터가 될 수 있지만 여기서는 계산 된 속성 (getter)을 사용하는 것이 좋습니다. |
값 | 추가 할 개체 |
정책 | 이 새로운 value 대한 메모리 정책은 예를 들어 선언 할 다른 모든 속성과 마찬가지로 유지 / 할당되고 복사되어야합니다. |
비고
기본 연결된 개체 예제
SomeClass
NSString 객체를 추가해야한다고 가정합니다 (하위 클래스는 없습니다).
이 예제에서 우리는 연관된 객체를 생성 할뿐만 아니라 여분의 깔끔함을 위해 카테고리의 계산 된 특성으로 포장합니다
#import <objc/runtime.h>
@interface SomeClass (MyCategory)
// This is the property wrapping the associated object. below we implement the setter and getter which actually utilize the object association
@property (nonatomic, retain) NSString *associated;
@end
@implementation SomeClass (MyCategory)
- (void)setAssociated:(NSString *)object {
objc_setAssociatedObject(self, @selector(associated), object,
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *)associated {
return objc_getAssociatedObject(self, @selector(associated));
}
이제는이 속성을 사용하는 것이 쉬울 것입니다.
SomeClass *instance = [SomeClass alloc] init];
instance.associated = @"this property is an associated object under the hood";
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow