반응형
호를 사용하여 세터 재정의
@interface Article : NSObject
@property (nonatomic, strong) NSString *imageURLString;
@end
@implementation Class
@synthesize imageURLString = _imageURLString;
- (void)setImageURLString:(NSString *)imageURLString {
_imageURLString = imageURLString;
//do something else
}
ARC가 활성화되었을 때 내가 세터를 올바르게 오버라이드했습니까?
네, 맞습니다.또한 저는 이것이 정말로 옳은 일이라고 믿는 데 시간이 걸렸습니다.
이 경우, 표준 생성 세터가 수행하는 것보다 더 많은 작업을 수행하지 않기 때문에 재정의가 필요하지 않다는 것을 알고 계십니까?코드를 더 추가하는 경우에만setImageURLString:세터를 오버라이드해야 합니까?
@Pascal이 제공한 답변을 확장하면서 저는 그것이 확실히 옳은 일이며 코드가 무엇으로 컴파일되는지 확인함으로써 확인할 수 있다는 것을 덧붙이고 싶습니다.확인 방법에 대한 블로그 게시물을 작성했지만 기본적으로 코드는 (ARMv7)로 압축됩니다.
.align 2
.code 16
.thumb_func "-[Article setImageURLString:]"
"-[Article setImageURLString:]":
push {r7, lr}
movw r1, :lower16:(_OBJC_IVAR_$_Article._imageURLString-(LPC7_0+4))
mov r7, sp
movt r1, :upper16:(_OBJC_IVAR_$_Article._imageURLString-(LPC7_0+4))
LPC7_0:
add r1, pc
ldr r1, [r1]
add r0, r1
mov r1, r2
blx _objc_storeStrong
pop {r7, pc}
호출 메모:_objc_storeStrongLLVM에 따르면 다음과 같은 작업을 수행합니다.
id objc_storeStrong(id *object, id value) {
value = [value retain];
id oldValue = *object;
*object = value;
[oldValue release];
return value;
}
그래서, 당신의 질문에 답하자면, 네 맞습니다. ARC는 이전 값의 올바른 릴리스와 새로운 값의 유지를 추가했습니다.
[아마도 너무 복잡한 답변일 수 있지만, 향후 ARC 관련 질문에 어떻게 답변할 수 있는지 보여주는 것이 유용하다고 생각했습니다.]
불러
[super setImageURLString:theString];
바로 그겁니다.
언급URL : https://stackoverflow.com/questions/7930654/override-setter-with-arc
반응형
'programing' 카테고리의 다른 글
| 백그라운드에서 CSS 이미지 확장 및 축소 - CSS만 사용 (0) | 2023.06.03 |
|---|---|
| 모듈에 중첩된 클래스 및 클래스를 사용해야 하는 경우 (0) | 2023.06.03 |
| 용기 크기를 기준으로 글꼴 크기 조정 (0) | 2023.06.03 |
| WPF(MVVM):보기 모델에서 보기를 닫으시겠습니까? (0) | 2023.05.29 |
| "chore"를 커밋 메시지 유형으로 사용할 때는 언제입니까? (0) | 2023.05.29 |