iOS - 2년 후 참조 개수 보기

1443 단어
iOS를 처음 접했을 때 iOS 개발이 ARC 모드로 진입했기 때문에 ARC 프로그래밍 모드로 바로 넘어갔다.오늘 동료와 문제를 토론하였는데, 자신이 약간 이해하는 데 큰 문제가 있다는 것을 발견하였다.BB가 많지 않으니 코드를 보세요.
@interface People()
@property (nonatomic, retain) NSArray *arr;
@end
@implementation People
- (instancetype)init {
    self = [super init];
    if (self) {
        self.arr = @[@"hello world"];
        NSLog(@"%ld", [self.arr retainCount]);
    }  
    return self;
}
@end

아니면 위의 코드, 우리는 약간의self 성립 내부의 코드를 아래의 코드로 변경1
        _arr = @[@"hello world"];
        NSLog(@"%ld", [_arr retainCount]);

2
        _arr = @[@"hello world"];
        NSLog(@"%ld", [_arr retainCount]);

3
        self.arr = @[@"hello world"];
        NSLog(@"%ld", [_arr retainCount]);

위에 정답 공개해 주세요. 2, 1, 1, 2.위의 답안은 처음에 나는 매우 이해할 수 없었다.아니면 채팅방의 한 사나이의 인내심 있는 설명으로 마음속의 많은 의혹을 풀었다.
여기에 설명을 드리겠습니다. @property에 대해 궁금한 것이 있다면, 제가 일찍이 쓴 글을 뒤적여 보겠습니다. 여기에Property에 대한 설명이 있습니다.자, 우리 원본 코드를 보자. 내가 여러분과 한 차례 분석할게.우선, 강조 사항:

대상이 alloc 방법을 조정하면 자동으로 자신의 인용 계수를 +1


구성원 변수 할당 값은 객체의 참조 계수에 영향을 주지 않습니다.


사실 여기서 @property에서 생성한setter 방법을 제시하면 여러분들은 활짝 밝아지는 느낌을 갖게 될 것입니다.
- (void)setArr: (NSArray *)arr {
     if(_arr != arr) {
             [_arr release];
             _arr = [arr retain];
      }
}

좋은 웹페이지 즐겨찾기