Associated 객체 연관
일반적으로 Associated Objects는 다음 장면을 사용하는 데 사용됩니다.
용 애플 홈페이지에서 제창한 글쓰기:static id _instance = nil;
static dispatch_once_t once_predicate;
+ (instancetype)getUser {
dispatch_once(&once_predicate, ^{
_instance = [[self alloc] init];
});
return _instance;
}
2. 석방 사례
/** */
+ (void)releaseUser {
if (_instance) { _instance = nil; once_predicate = 0;}
}
3.
Associated Objects
창설 단례#import
@interface NSObject (Instance)
+ (instancetype)getInstance;
/** */
+ (void)freeInstance;
@end
*//const void *SHARED_INSTANCE_KEY = @"kSharedInstance";*
static void *SHARED_INSTANCE_KEY = &SHARED_INSTANCE_KEY;
@implementation NSObject (Instance)
+ (instancetype)getInstance {
Class selfClass = [self class];
id instance = objc_getAssociatedObject(selfClass, SHARED_INSTANCE_KEY);
if (instance == nil) {
instance = [[selfClass alloc] init];
objc_setAssociatedObject(selfClass, SHARED_INSTANCE_KEY, instance, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
return instance;
}
/** */
+ (void)freeInstance {
Class selfClass = [self class];
objc_setAssociatedObject(selfClass, SHARED_INSTANCE_KEY, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end
objc_setAssociatedObject
는 대상에 관련 대상을 추가하는 데 사용되며, 전송nil
은 기존의 관련 대상을 제거할 수 있다objc_getAssociatedObject
연결 대상을 얻는 데 사용objc_removeAssociatedObjects
객체의 모든 연관 객체를 제거하는 데 사용objc_removeAssociatedObjects
함수는 일반적으로 사용할 수 없습니다. 왜냐하면 이 함수는 한 대상의 모든 관련 대상을 제거하고 이 대상을'원시'상태로 복원하기 때문입니다.이렇게 하면 다른 사람이 추가한 관련 대상도 함께 제거할 가능성이 높다. 이것은 우리가 바라는 것이 아니다.그래서 일반적인 방법은 objc_setAssociatedObject
함수에 전달nil
을 통해 기존의 관련 대상을 제거하는 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.