ARC环境下iOS内存管理方法
如果我一直调用这个方法,内存方面会发生什么? (请不要评论代码,这只是一个思想示例。)ARC环境下iOS内存管理方法,ios,objective-c,memory-management,memory-leaks,automatic-ref-counting,Ios,Objective C,Memory Management,Memory Leaks,Automatic Ref Counting,如果我一直调用这个方法,内存方面会发生什么? (请不要评论代码,这只是一个思想示例。) tempResultaray是否会继续增加引用计数,或者在返回tempResultaray后ARC是否会执行此操作,并解除锁定?ARC将may(请参阅注释)在返回前调用tempResultaray。之后会发生什么,取决于程序的其他部分。下次调用此方法时,将创建一个新的tempsultarray,并重复该过程。关键在于为您完成内存管理。如果您继续调用此方法,则无需担心。“如果我继续调用此方法,内存方面会发生什么
tempResultaray
是否会继续增加引用计数,或者在返回tempResultaray
后ARC是否会执行此操作,并解除锁定?ARC将may(请参阅注释)在返回前调用tempResultaray
。之后会发生什么,取决于程序的其他部分。下次调用此方法时,将创建一个新的tempsultarray
,并重复该过程。关键在于为您完成内存管理。如果您继续调用此方法,则无需担心。“如果我继续调用此方法,内存方面会发生什么情况?”您可以并且应该使用工具来回答此问题。ARC编译器可能会添加自动释放调用。ARC优化器非常聪明,可以删除不必要的保留/释放/自动释放调用(使用交叉方法优化)。甚至在运行时,被调用函数也可以检查调用方堆栈并决定是否需要自动释放。还有一个问题:如果通过返回到具有指向NSMtableArray对象的强指针的属性来传递tempResultArray,那么tempResultArray会怎么样。(例如自我结果)?分配时(或同等情况下,ARC允许)会发送一条retain
消息。但是请记住,这与方法范围内的指针不同。这是一个堆栈指针,当堆栈帧移动时,它就会消失。数组本身在堆上,并一直保留,直到其保留计数变为0。
-(NSMutableArray*)searchForItemsWithString:(NSString *)searchString
{
NSString *baseUrl = @"http://www.myService.com/";
NSURL *tempUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",baseUrl, searchString]];
NSMutableArray *tempResultArray = [[NSMutableArray alloc ] initWithContentsOfURL:tempUrl];
return tempResultArray;
}