2010-11-15 53 views
0

我有一個方法:問題的目標C存儲器manament

-(NSArray *)doSomething{ 

    NSArray *array = [[NSArray alloc] initWithObjects:@"Huy 1",@"Huy 2",@"Huy 3",nil]; 

    [array release]; 

    return array; 

} 

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    NSArray *array = [self doSomething]; 

    if(array&&array.count>0){ 

     NSLog([NSString stringWithFormat:@"%@\n",[array objectAtIndex:1]]); 

    } 
    else{ 

     NSLog(@"Null"); 

    } 

} 

我認爲我釋放陣列上的doSomething(),因此它不會返回的NSArray其中我創建在doSomething()上。我不知道它還印有「Huy 2」?任何人都可以告訴我爲什麼?

回答

2
-(NSArray *)doSomething 
{ 
    NSArray *array = [[NSArray alloc] initWithObjects:@"Huy 1",@"Huy 2",@"Huy 3",nil]; 

    return [array autorelease]; 
} 

Memory Management Programming Guide

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSArray *array = [self doSomething]; 

    if([array count]) //if array is nil this will evaluate to false. If count is 0 this will evaluate to false too. 
    { 
     NSLog(@"%@\n", [array objectAtIndex:1]); //NSLog insert values for you 
    } 
    else 
    { 
     NSLog(@"Null"); 
    } 
} 

如果這與release作品autorelease相反,它可能是因爲該陣列使用的內存還沒有被別的方法使用。這只是偶然。我懷疑如果你在NSArray *array = [self doSomething];之後分配一個對象,你會得到意想不到的結果。

+0

感謝您的幫助:) – 2010-11-17 01:37:28

1

,請遵循的方式方法:

-(NSArray *)doSomething{ 

    NSArray *array = [[NSArray alloc] initWithObjects:@"Huy 1",@"Huy 2",@"Huy 3",nil]; 

    return [array autorelease]; 

}