我有一个方法:
-(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()上发布了数组,所以它不会返回我在doSomething()上创建的NSArray。我不知道它还打印“Huy 2”?有谁能告诉我为什么?
答案 0 :(得分: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];
之后分配一个对象,你会得到意想不到的结果。
答案 1 :(得分:1)
按以下方式使用该方法:
-(NSArray *)doSomething{
NSArray *array = [[NSArray alloc] initWithObjects:@"Huy 1",@"Huy 2",@"Huy 3",nil];
return [array autorelease];
}