TL; DR 당신이 결과에 영향을 미칠 수 있습니다 로그인하는 방법, 당신은 그러므로 1
다음 대답으로 모든 인쇄 결과를 증가 로그인 임시 소유권을 얻을 수 있습니다 당신 때문에 단순화 retainCount
의 실제 가치에 대해 실제로 걱정하지 않아야합니다.
보유 수는 주어진 개체의 참조 (소유자) 수를 유지합니다. 만들 때 정확하게 하나의 소유자가 있으므로 보유 수는 1로 설정됩니다. 개체가 새 소유자 (retain
)를 얻을 때마다 보유 수는 1 씩 증가합니다. 객체가 손실되고 소유자 (release
)가 될 때마다 보유 수는 1 씩 감소합니다.
retainCount
은 절대로 0에 도달 할 수 없습니다. 소유자 수가 1이고 소유자를 잃어 버리면 개체가 할당 취소되고 카운트가 줄어들지 않습니다.
var foo1: TestObject? = TestObject()
print("#")
print(CFGetRetainCount(foo1))
var foo2 = foo1
print("#")
print(CFGetRetainCount(foo1))
foo2 = nil
print("#")
print(CFGetRetainCount(foo1))
foo1 = nil
결과 : 대신 NSObject
가의 스위프트 그것을
@implementation TestObject
- (instancetype)init {
TestObject *result = [super init];
NSLog(@"Retain count after creation: %@", @(self.retainCount));
return result;
}
- (instancetype)retain {
TestObject *result = [super retain];
NSLog(@"Retain count after retain: %@", @(self.retainCount));
return result;
}
- (oneway void)release {
NSLog(@"Retain count before release: %@", @(self.retainCount));
[super release];
}
- (void)dealloc {
NSLog(@"Retain count before dealloc: %@", @(self.retainCount));
[super dealloc];
}
@end
및 사용 :
더 나은 테스트를 위해, 나는 ARC없이 컴파일,의 Obj-C 클래스를 만들었습니다
Retain count after creation: 1
#
Retain count after retain: 2
2
Retain count before release: 2
Retain count after retain: 2
#
Retain count after retain: 3
3
Retain count before release: 3
Retain count before release: 2
#
Retain count after retain: 2
2
Retain count before release: 2
Retain count before release: 1
Retain count before dealloc: 1
기본적으로 기대하는 바는 있지만 추가 보유 및 함수에 객체를 전달할 때 임시 소유권을 얻을 때마다 CFGetRetainCount
을 배포합니다.
retainCount
의 값을 절대로 읽지 말아야하는 사례 중 하나입니다. 디버깅 값이 없으며 documentation에 언급되어 있습니다.
'foo1','foo2'가 상수이기 때문에 * 컴파일되지 않습니다. 변수로 선언하더라도 'nil'을 지정할 수 없습니다. 너 정말로 뭘 시험 했니? –
CFGetRetainCount가 개체 보유 수에 대한 저를 보여줄 수 있다고 생각하지 않습니다. 간단한 코드를 시도해보십시오 : var foo1 : NSNumber? = NSNumber (값 : 0) print (CFGetRetainCount (foo1)). 매우 큰 숫자를 인쇄합니다 – larva
코드에 대한 질문을하고 있습니다. 당신이 물어 보는 코드를 게시하는 것이 보통의 예의이며, 그 자리에서 방금 만든 코드가 아닙니다. – gnasher729