1. 메모리 관리 함수
참조계수 출력 : retainCount
참조계수 증가 : retain
참조계수 감소 : release
2. 샘플 코드
@interface Car :NSObject
-(void)dealloc;
@end
@implementation Car
-(void)dealloc
{
NSLog(@"dealloc");
[super dealloc];
}
@end
int main()
{
Car* p1 = [[Car alloc] init];
NSLog(@"p1 = %lu",[p1 retainCount]);
Car* p2 = p1;
NSLog(@"p1 = %lu",[p1 retainCount]);
NSLog(@"p2 = %lu",[p2 retainCount]);
[p2 retain];
NSLog(@"p1 = %lu",[p1 retainCount]);
NSLog(@"p2 = %lu",[p2 retainCount]);
[p1 release];
NSLog(@"p1 = %lu",[p1 retainCount]);
NSLog(@"p2 = %lu",[p2 retainCount]);
[p2 release];
NSLog(@"p1 = %lu",[p1 retainCount]);
return 0;
}
3. autorelease
release를 컴파일러가 알아서
idle time에 들어갈때 비워준다. 혹은 오토릴리즈풀을 release해줄때 비워준다.
4. 샘플코드
@interface Car :NSObject
-(void)dealloc;
@end
@implementation Car
-(void)dealloc
{
NSLog(@"dealloc");
[super dealloc];
}
@end
int main()
{
Car* p1 =[Car alloc];
[p1 release];
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
//Car* p2 =[[Car alloc] init];
//[p2 autorelease];
Car* p2 = [[[Car alloc] init] autorelease];
[pool release];
return 0;
}
5. 정적메소드
정적 메소드에서 초기화 할때는 autorelease를 붙여준다.
정적 메소드는 자주 사용되는 형식의 객체를 생성할때 쓴다. ex) NSArray arrayWith~
Conventional Constructor : 자주쓰는 형태를 클래스 함수 형태로 제공
6. 샘플 코드
@interface Car :NSObject
-(void)dealloc;
// 자주 사용되는 형식의 객체를 생성하는 정적 메소드
+(Car*)carWithRed;
@end
@implementation Car
-(void)dealloc
{
NSLog(@"dealloc");
[super dealloc];
}
+(Car*)carWithRed
{
// Conventional Constructor
Car* p =[[[Car alloc] init] autorelease];
return p;
}
@end
int main()
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
// Car* p1 = [[Car alloc] initWithColor:red speed:100];
Car*p1 = [Car carWithRed];
[pool release];
NSLog(@"%x",p1); // 포인터 주소 찍기
return 0;
}
7. Objective-C에서 제공하는 정적 메소드 예제
int main()
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
// ObjC 객체 생성 2가지
// 사용자 alloc
NSArray* arr1 = [[NSArray alloc] initWithObjects:@"A",@"B", nil];
// 정적 메소드
NSArray* arr2 = [NSArray arrayWithObjects:@"A",@"B", nil];
// NSArray arr3; // stack 객체 에러 objc 힙객체만 가능
NSRange range; // ok, c구조체
[pool release];
NSLog(@"%@ %@",arr1[0],arr2[0]);
[arr1 release];
NSLog(@"%@ %@",arr1[0],arr2[0]);
return 0;
}
'교육 > Objective-C' 카테고리의 다른 글
[Objective-C] block (0) | 2016.07.26 |
---|---|
[Objective-C] property (0) | 2016.07.26 |
[Objective-C] init (0) | 2016.07.26 |
[Objective-C] target-Action (0) | 2016.07.13 |
[Objective-C] selector (0) | 2016.07.13 |