0
카테고리에 게으른 인스턴스화를 사용하려고하지만 명백한 무한 루프를 입력하지 않고이를 수행하는 방법에 전념하고 있습니다. 여기에 ilustrate에 대한 몇 가지 코드 :Category + Objective C의 게으른 인스턴스화 패턴
@implementation User (Extras)
- (CacheControl *)cache
{
CacheControl *_cache = (CacheControl *)[self valueForKey:@"cache"];
if(!_cache){
[self setCache:(CacheControl *)[NSEntityDescription insertNewObjectForEntityForName:@"CacheControl" inManagedObjectContext:self.managedObjectContext]];
}
return _cache;
}
@end
이 상황을 해결하거나 그냥 전혀 그렇게하지 않는 방법을 어떤 아이디어가?
- (CacheControl *) cache {
[self willAccessValueForKey:@"cache"];
CacheControl * cache = [self primitiveValueForKey:@"cache"];
[self didAccessValueForKey:@"cache"];
if (cache == nil) {
cache = [NSEntityDescription insertNewObjectForEntityForName:@"CacheControl" inManagedObjectContext:self.managedObjectContext];
[self setPrimitiveValue:cache forKey:@"cache"];
}
return cache;
}
비슷한 예는 "코어 데이터 프로그래밍 가이드"에서 찾을 수 있습니다 및 지역 :
'User'는'cache' 속성을 가지고 있습니까? – Rich
우리는 그렇게 생각해야한다고 생각하지만 질문으로는 명확하게하지 않습니다. – fatuhoku
예, 사용자가 cache 속성을 가지고 있지만, Martin R의 대답이이 문제를 해결했습니다. –