본문 바로가기
프로그래밍/iOS

[snippet] Lazy Instantiation

by 백룡화검 2012. 7. 22.
출처 : http://cafe.naver.com/mcbugi/222516

Lazy Instantiation

참고로 저는 입문자 입니다. 자세히는 몰라요..^^;


Lazy Instantiation 이라는걸 사용하기전에...프로퍼티 선언부터 잠시 짚고 넘어가겠습니다.

한국인을 위한 ..... 팟케스트 보고 정리해보는 겁니다.

클래스에 헤더를 import 하죠...

#import <UIKit/UIKit.h>
#import "sdfasd.h"
@interface sdfasdViewController : UIViewController
@property (nonatomicstrongsdfasd *objectPlus;
@end
저렇게 프로퍼티를 선언해주고..


@synthesize objectPlus = _objectPlus;

위에 처럼 systhesize 해줍니다.

이유가 클래스변수와 인스턴스 변수를 구분하기 위함이랍니다..


@synthesize objectPlus;

이렇게 해주게 되면 나중에 쓸때

objectPlus 이렇게 쓰면 되지만.. 클래스변수와 프로퍼티가 같은 형태로 쓰이기 때문에 구분한답니다.


위에처럼 해주게 되면

self.objectPlus 이렇게 사용하게 됩니다.

objectPlus 는 클래스변수
self.objectPlus 는 프로퍼티 (인스턴스 변수)
저도 자세히는 모릅니다. 그냥 저렇게 쓰고 있습니다.
(좋아요.. 구분하기도 좋고..)


프로퍼티를.. Lazy Instantiation 하는 이유.

"게으른 인스턴스화" 라고 한답니다.


- (sdfasd *)objectPlus
{
    if (!_objectPlus) {
        _objectPlus = [[sdfasd  allocinit];
    }
    return _objectPlus;
}

저 프로퍼티화 된 클래스를 필요할때만 생성해서 쓰고..
메모리 워닝이 나면..1차적으로 버려지는
뭐 그런 시스템이랍니다.

메모리 관리에 효율적이라네요.. 그래서 저도 자주 쓰고 있습니다.

아래는 스니펫 코드 입니다.
클래스 import 하고, 프로퍼티화 하고, 신서사이즈 까지 한뒤에..
사용하시면 되겠습니다.




#pragma mark -
Lazy Instantiation
- (<#Super Object#> *)<#init object#>
{
    if (!_<#init object#>) {
        _<#init object#> = [[<#Super Object#>  alloc] init];
    }
    return _<#init object#>;
}