2009-09-28 2 views
0

다음 코드를 고려해보십시오.iPhone에서 수수께끼를 푸는 데 도움을 주시겠습니까?

//CallerClass.h 
@interface CallerClass : UITableViewController { 

    NSMutableArray *dataArray; 

} 
@property(nonatomic,retain) NSMutableArray *dataArray; 
-(void) setData; 

//CallerClass.m 
@implementation CallerClass 
@synthesize dataArray; 

-(id)initWithStyle:(UITableViewStyle)style { 

    if (self = [super initWithStyle:style]) { 
    [self setData]; 
    } 
    return self; 
} 

-(void) setData 
{ 
    dataArray = [CalledClass getData]; 
    [dataArray release]; 

} 


//CalledClass.h 
@interface CalledClass : NSObject { 

} 
+(NSMutableArray*) getData; 

//CalledClass.m 
@implementation CalledClass 

+(NSMutableArray*) getData 
{ 
    NSMutableArray* tempArray = [[NSMutableArray alloc] init]; 
    return tempArray; 
} 

tempArray 인 dataArray의 보유 개수를 알고 싶습니다. 출시 될 예정입니다. 나는 내가 그것을 필요로 할 때까지 내가 모르는만큼 autorelease를 사용하고 싶지 않다. 그래서 나는 그것을 스스로 풀고 싶다. tempArray를 할당 할 때 보유 수는 1이됩니다. 그러나이 속성을 retain이라는 인스턴스 변수 dataArray에 할당하면 해당 배열의 보유 수는 2가됩니까 아니면 1로 유지됩니까? dataArray를 해제 할 때처럼 메모리가 해제됩니다.

답변

1

dataArray = [CalledClass getData]; 속성의 retain 속성을 호출하지 않습니다. 그건 그냥 평범한 구술 iirc 일 뿐이야. [self setDataArray : [CalledClass getData]]는 배열에 참조 카운트 2를줍니다.

+0

을 (당신이 속성 선언에서 "유지"지정했기 때문에) 객체를 해제 처리됩니다 = [호출 된 getData]; – rkb

2

당신은 값을 유지하기 위해 속성을 설정했지만, 당신은 접근 방법을 사용하지 않는 있지만 대신 직접 인스턴스 변수를 설정 :

dataArray = [CalledClass getData]; 

이 수를 유지 관리하지 않습니다 너를 위해서.

+(NSMutableArray*) getData 
{ 
    NSMutableArray* tempArray = [[NSMutableArray alloc] init]; 
    return [tempArray autorelease]; 
} 

은 일반적으로 내가 가진 메소드로부터 되돌려 오토 릴리즈 개체를 가져 기대 :

self.dataArray = [CalledClass getData]; 

또한, 귀하의 CalledClass에, 나는이에 GetData 메서드를 변경할 것입니다 : 당신은 사용해야합니다 이런 이름.

사항 setData : 그럼해야 뭔가 같은 :

-(void) setData 
{ 
    self.dataArray = [CalledClass getData]; 
} 

또는 완전히 그냥 직접

initWithStyle에서
self.dataArray = [CalledClass getData] 

을 그것을 제거 할 수 :. 대신 인스턴스 변수에 직접 할당하는 self.dataArray를 호출하여

, 당신의 dataArray 속성은 유지 어떤 self.dataArray에 대한

+0

그래서 autorelease를 사용하지 않고 self.dataArray = [CalledClass getData]를 사용할 경우 보유 수는 어떻게됩니까? 데이터를 공개해야하는 횟수. – rkb

+0

[[NSMutableArray alloc] init]은 보유 개수가 1 인 가변 배열을 제공합니다. self.dataArray = [CalledClass getData]는 보유 개수를 2로 늘립니다. 그런 다음 한 번 해제해야합니다. –

+0

Ohkk Tnx Thomas. 내 자신을 사용하지 않는다면 보유 수를 늘리지 않을 것임을 의미합니다. – rkb

관련 문제