例如,我创建了一个数组并将一些自定义类放入其中。我应该按照一定的顺序取消并释放它们吗?如果我将后台ASIHTTPRequests放在一个数组中,如果我先释放数组会有泄漏吗? ARC中它是一样的吗?谢谢你的回答。
答案 0 :(得分:1)
当您将对象添加到NSArray
时,它会自动保留,然后当您release
数组时,release
信号将被发送到该数组中的所有对象。所以:
-(void)someMethod{
NSString *newString = [[NSString alloc] initWithString:@"Hello"]; //newString retainCount = 1
NSArray *newArray = [[NSArray alloc] initWithObjects: newString]; //newString retainCount = 2
[newArray release]; //newString retainCount = 1
[newString release]; //newString retainCount = 0
}
与:
相同-(void)someMethod{
NSString *newString = [[NSString alloc] initWithString:@"Hello"]; //newString retainCount = 1
NSArray *newArray = [[NSArray alloc] initWithObjects: newString]; //newString retainCount = 2
[newString release]; //newString retainCount = 1
[newArray release]; //newString retainCount = 0
}
事实上,当您想要创建一个对象数组而不需要对这些对象进行单独引用时,第二个代码是一种非常常见的做法。