2011-07-28 5 views
3

어떻게 NSMutableArray 단추를 지연 초기화 할 수 있습니까? 나는 이런 식으로 :어떻게하면 NSMutableArray를 초기화 할 수 있습니까?

-(NSMutableArray *)roasteryButtons 
{ 
    if(!roasteryButtons) 
    { 
    roasteryButtons = [ NSMutableArray new]; 
    //other code 
    } 
return roasteryButtons; 
} 

이 게으른 초기화 프로그램을 어떻게 호출해야할지 모르십니까? 즉, 나는 내가 배열에있는 모든 버튼의 프레임을 설정할 수 있도록 배열을 초기화 할 필요가

답변

2

올바른 것은 무엇입니까? 클래스의 init 메소드에서 배열을 할당하는 대신, u는 필요한 경우에만 배열을 할당합니다. 따라서 지연 할당의 목적을 수행합니다. 클래스, 당신은 배열을 원하는 어디든지, 당신은 그냥 전화에서

,
NSMutableArray *arr = [self roasteryButtons]; 

또한 -(NSMutableArray*)roasteryButtons;, 같은 헤더 파일에 메소드를 선언합니다. 당신이 다른 클래스의 배열의 참조를 원하는 경우

는 전화와 같은,

[classObj roasteryButtons]; 

나는 인스턴스 방법으로 그것을 보여 주었다. 그렇게 원한다면 클래스 메소드로 선언 할 수도 있습니다.

그리고이를 -(void)dealloc 방법으로 출시하십시오.

@property (비 원자 강한)있는 NSMutableArray * 배열을 다음과 같은 속성으로하여 NSMutableArray를 선언 .H 파일에

를 따를 때 게으른 수있는 완벽한 방법은 초기화

0

당신은 당신의 방법 클래스 메소드 만들 수 있습니다 : 당신이 그것을 호출 할 수있을 것입니다 이런 식으로

+(NSMutableArray *)roasteryButtons { 

을 이렇게 :

[MyRoasteryButtonClass roasteryButtons]; 

그리고 이것은 당신에게 당신의 물건을 돌려 줄 것입니다.

희망이 도움이됩니다.

2

이 방법을 언제 호출해야하는지 알 것입니다. 맞습니까?

첫 번째 방법은 "new"메소드를 사용하지 말고 [NSMutableArray alloc] init을 사용하는 것입니다. NSArray에 사용할 수있는 기존의 [Init] 메소드를 모두 살펴 봐야합니다. (용량, 객체 등)

어쨌든 메소드 [roasteryButtons]에 매개 변수를 추가해야합니다. 메소드에 알 수있는 매개 변수 (예 : 생성 할 버튼 수, 그들이 보여 주어야 프레임, 등등 그래서이 ...

예를 들어

-(NSMutableArray *)roasteryButtonsWithFrame:(*Frame) andNumbersOfButtons:(int) 

처럼 조금 보이는 것

또는 매개 변수 대신 위 질문에 대한 답변을 제공 할 수있는 대리인에 대한 참조를 전달할 수 있습니다 (몇 개의 단추, 내 프레임 및 범위 등).이 경우 메서드는 다음과 같습니다. :

-(NSMutableArray *)roasteryButtonsWithDelegate:(id) 

(이 대표는 대표가 응답해야 할 다른 방법을 포함 생성하는 프로토콜을 구현해야합니다. 즉 [howManyButtons] ...와 같은 메소드)

+0

'new'사용에는 아무런 문제가 없습니다. http://stackoverflow.com/questions/719877/use-of-alloc-init-instead-of-new-objective-c – mvds

+1

아니요, 그가 실제로 한 결정이 아니라 다른 OO 언어의 습관 일 수 있기 때문에 방금 언급했습니다. 간단한 Init의 변형은 일반적으로 매우 유용합니다. –

+0

확인. 그러나 numberofbuttons은 왜 단지 int 나 더 나은 것이 아닌, NSInteger 나 더 나은 NSUInteger가 아닌가? 'int'는 고대 언어의 습관이다 ;-) – mvds

1

이다;

지금하는 .m 파일을 합성하고 게으른은 다음과 같은 게터에 초기화 않습니다

@synthesize 배열 = _array;

(NSMutableArray *) 배열 { (! _array) _array = [[NSMutableArray alloc] init]; //이 줄은 지연 초기 화 (lazy intialization)라고합니다.이 줄은 프로그램에서 런타임에 MutableArray를 만듭니다.

반환 _array } 우리가이가 더있는 NSMutableArray 후 생성되지 않은 경우는 프로그램 실행시에를 생성하고이 앱이 같은 충돌하지 않습니다에 대한 돌볼 것입니다 필요한 이유

지금 대답합니다.

관련 문제