지정된 클래스 A는 :내부 클래스의 원자 속성을 올바르게 전달하는 방법은 무엇입니까? 다음과 같습니다 헤더 표준 프레임 워크 중 하나의 원자 특성을 가진
@interface A : NSObject
@property float value;
@end
클래스 B를 확장, 재 지정 및 조성 클래스 A의 경우 앞으로 로직. 이 구현으로 클래스 B의 value 프로퍼티도 아토믹입니까?
@interface B : NSObject
@property float value;
@end
@implementation {
A _innerA;
}
- (instancetype)init {
self = [super init];
if (self) {
_innerA = [A new];
}
return self
}
- (float)value {
return _innerA.value;
}
- (void)setValue:(float)value
{
_innerA.value = value;
}
@end
또는 추가 잠금 메커니즘이 있어야합니까?
@implementation {
A _innerA;
dispatch_semaphore_t _valueSemaphore;
}
- (instancetype)init {
self = [super init];
if (self) {
_innerA = [A new];
_valueSemaphore = dispatch_semaphore_create(1);
}
return self
}
- (float)value {
dispatch_semaphore_wait(_valueSemaphore, DISPATCH_TIME_FOREVER);
float value = _innerA.value;
dispatch_semaphore_signal(_valueSemaphore);
return value;
}
- (void)setValue:(float)value
{
dispatch_semaphore_wait(_valueSemaphore, DISPATCH_TIME_FOREVER);
_innerA.value = value;
dispatch_semaphore_signal(_valueSemaphore);
}
내부 클래스 자체를 원자 속성으로 정의하면 어떻습니까?
@interface B()
@property A innerA;
@end
@implementation
- (instancetype)init {
self = [super init];
if (self) {
_innerA = [A new];
}
return self
}
- (float)value {
return self.innerA.value;
}
- (void)setValue:(float)value
{
self.innerA.value = value;
}
@end