Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Objective-C中的记忆管理问题_Iphone_Objective C - Fatal编程技术网

Iphone Objective-C中的记忆管理问题

Iphone Objective-C中的记忆管理问题,iphone,objective-c,Iphone,Objective C,我有一个方法: -(NSArray *)doSomething{ NSArray *array = [[NSArray alloc] initWithObjects:@"Huy 1",@"Huy 2",@"Huy 3",nil]; [array release]; return array; } 及 我认为我在doSomething()上发布了数组,所以它不会返回我在doSomething()上创建的NSArray。我不知道它还印着“Huy 2”?任何人

我有一个方法:

-(NSArray   *)doSomething{

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

    [array  release];

    return  array;

}


我认为我在doSomething()上发布了数组,所以它不会返回我在doSomething()上创建的NSArray。我不知道它还印着“Huy 2”?任何人都可以告诉我为什么?

使用以下方法:

-(NSArray   *)doSomething{

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

    return  [array autorelease];

}

按以下方式使用该方法:

-(NSArray   *)doSomething{

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

    return  [array autorelease];

}

如果这与
release
而不是
autorelease
一起工作,可能是因为数组使用的内存还没有被其他任何东西使用。这只是个机会。我怀疑如果在
NSArray*array=[self doSomething]之后分配一个对象您将得到意外的结果

如果这与
release
而不是
autorelease
一起工作,可能是因为数组使用的内存还没有被其他任何东西使用。这只是个机会。我怀疑如果在
NSArray*array=[self doSomething]之后分配一个对象您将得到意外的结果

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

    return  [array autorelease];
}
- (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");
    }
}