2011-03-10 8 views
2

내가 .H 파일에있는 NSArray 객체 생성 :있는 NSArray 수명주기

NSArray *tempArray; 

을 나는() 메소드의 viewDidLoad에서하는 .m 파일을 ALLOC보다 :

tempArray = [[NSArray alloc] init]; //initilaize 
tempArray = [connect connectSeriesJSonBack]; //fill it (I try it works) 

하지만 내가 사용하려는 같은 다른 방법이 배열 : 나는 ALLOC를 사용하기 때문에 내가 배열의 라이프 사이클을 구성 할 수있는 방법

- (void)scrollViewDidEndDecelerating:(UIScrollView *)_scrollView 

는 범위 배열 데이터를 다시 등의 방법을 유지하지 않습니다.

+0

에서 다른 방법을 유지 그것이 NSMutableArray 객체를 사용)

1

작동하고 객체
tempArray = [[NSMutableArray alloc] init]; [tempArray addObjectsFromArray:[connect connectSeriesJSonBack]]; 

2

)를 추가하는 방법이 개 방법이 있습니다 같은 수업 ...? –

+0

예 mihir 같은 클래스, 배열 데이터에 접근 할 수없는 이유를 이해하지 못합니까? – NevzatR

+0

.h 파일에 tempArray를 만든 경우 ... 해당 클래스에서 tempArray에 직접 액세스해야합니다. 아무 것도 할 필요가 없습니다. 액세스하기 전에 해제해야합니다. –

답변

2

두 번째 과제 같은 것을해야한다. connectSeriesJSonBAck은 아마도 자동 완성 된 NSArray을 반환합니다. 현재 범위의 외부를 참조 유지하려는 경우, 당신은 그것을 유지해야합니다

대신 :

tempArray = [[NSArray alloc] init]; //initilaize 
tempArray = [connect connectSeriesJSonBack]; //fill it (I try it works) 

tempArray = [connect connectSeriesJSonBack]; 
[tempArray retain]; 

을하고 클래스 'dealloc 방법에 [tempArray release]를 추가합니다.

+0

감사 Diederik, 그것은 메모리 관리 자습서를 읽어야 작동합니다. 하지만 곧 알려 주실 수 있습니까? 왜 할당하지 말고,이 객체를 초기화하고 유지해야합니까? – NevzatR

+0

당신은 Diederik에게 물었습니다.하지만 아마도 당신에게 대답을 줄 수 있습니다. 왜냐하면 당신이 [connect connectJSonBack]에서 얻은 것 때문입니다; 할당 된 nsarray.you 그냥 보유해야합니다. – Csabi

+0

[connectSeriesJSonBack에 연결]은 당신이 무엇을 할당하고 있는지 전혀 모릅니다. [[NSArray alloc] init]을 실행하면 완전히 새로운 객체를 생성 한 다음 [connectSeriesJSonBack에 연결]하면 동일한 객체를 낭비합니다. 다른 질문은 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html%23//apple_ref/doc/uid/20000043-BEHDEDDB를 참조하십시오. – Dre

0

클래스 내에서 동일한 배열에 액세스하려는 경우 해당 클래스의 멤버가 클래스 전체에서 액세스 할 수 있도록 클래스 변수로 만들 수 있습니다.

+1

용어는 "instance 변수 "또는"ivar " – dreamlax

0

나는 mutableExample = [[[NSMutableArray alloc] init]retain]; 하거나 example = [[NSArray alloc] init];

처럼 -()viewdidload ALLOC 거기에 다음

@implementation YourViewController 

NSMutableArray *mutableExample; 
// or 
NSArray *example; 

처럼 implemantation에서 그것을 declar을 제안하고 당신이 그것을 해제하는 것을 잊지 where.do 그것은 모든 사용할 수 있습니다! !! !! 그 방법은 당신이 사용할 수있는 -

뭔가

wblade

+1

당신의 대답과 도움을 주셔서 감사합니다 Csabi .. – NevzatR

3

방법의 배열을 해제하고, 대신의 dealloc 메서드에서 손을 놓으십시오 주석에 물어 불분명 경우가 도움이되기를 바랍니다 그것 다른 장소.

그렇지 않으면 여기에도 또 다른 문제가 있습니다. 여기

당신은 유지, 빈, 불변 NSArray를

tempArray = [[NSArray alloc] init]; 

를 만들고 그 인스턴스를 유지에 이제 포인터를 덮어은, 야호, 당신은 그냥있는 NSArray에게

tempArray = [connect connectSeriesJSonBack]; 

그리고 유출 방법 은 자동 출시 NSArray를 반환해야합니다. 이벤트 루프를 치면 자동으로 해제되고 사라집니다.

당신은 할당이 다시 액세스되지 않을 수 있기 때문에 메모리 누수가 발생합니다 tempArray이

-(void)whereverThisIs { 
    // Do not retain here if connectSeriesJSonBack returns a retained instance 
    tempArray = [[connect connectSeriesJSonBack] retain]; 
} 

-(void)dealloc { 
    [tempArray release]; 
} 

-(void)anotherMethod { 
    if (tempArray) { // Do things } 
} 
+1

정말 좋은 답변을 주셔서 감사합니다 Dre – NevzatR

0

tempArray보다 [connect connectSeriesJSonBack];의 함수에서 자동 반복 배열을 반환하는 경우 viewDidLoad 메서드 다음에 반환 횟수가 0이됩니다.

는 반환 된 배열

tempArray = [[connect connectSeriesJSonBack] retain];