수색…


소개

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 대한 메모리 정책은 예를 들어 선언 할 다른 모든 속성과 마찬가지로 유지 / 할당되고 복사되어야합니다.

비고

자세한 내용은 여기 :

NSHipster

@kostiakoval

킹스 코코아

기본 연결된 개체 예제

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