OC 메모리 관리 사용
release
해?!클래스 방법에 추가autoRelease
방법으로main 함수에서 이 클래스 방법을 사용할 때 하나의 스레드 탱크를 만들면 시스템은 자동으로 이 클래스 방법이 만든 대상을 가장 가까운 스레드 탱크에 넣는다(OC
.스레드 탱크의 drain( )
방법을 호출하면 클래스 방법으로 만든 대상을 방출할 수 있습니다!왜 이런 방법Test *a = [Test getInstance]
아래에서 [a release]
방법을 사용하지 않습니까?!첫째, 여기 호출 가능!그런데 다른 예는 안 돼요. 왜 당신은 클래스 밖에 있어서 제 클래스 안에 도대체 alloc init
가 몇 개의 대상을 만들었는지 몰라요. 당신은 당신이 release
에도...그러니까 저희가 여기서 autoRelease
자동방출을 해야 돼요. 지연방출이라고도 해요.main.m 파일
#import
#import "Test.h"
//void foo(int i) {
// Test *a = [[Test alloc] init] ;
// Test *b = nil ;
// if (i > 10) {
// b = a ;
// [b retain] ;
// }
// [a release] ;
// [b release] ;
//}
int main(int argc, const char * argv[]) {
// foo(1) ;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init] ;
Test *a = [Test getInstance] ;
NSLog(@"main before drain") ;
[pool drain] ;
NSLog(@"main after drain") ;
return 0;
}
Test.h 파일
#import
@interface Test : NSObject
+ (Test *)getInstance ;
@end
Test.m 파일
#import "Test.h"
@implementation Test
// : ;
- (instancetype)retain {
NSLog(@"Test:before Retain: %@" , @(self.retainCount)) ;
id result = [super retain] ;
NSLog(@"Test after Retain %@" , @(self.retainCount)) ;
return result ;
}
- (oneway void)release {
NSLog(@"Test:before Release: %@" , @(self.retainCount)) ;
[super release] ;
NSLog(@"Test:before Release: %@" , @(self.retainCount)) ;
}
- (void)dealloc {
[super dealloc] ;
NSLog(@"Test:dealloc") ;
}
+ (Test *)getInstance {
Test *result = [[[Test alloc] init] autorelease] ;
return result ;
}
@end
프로그래밍이 이 세상을 더욱 아름답게 하기를 바란다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.