[英]ARC vs. non-ARC removeLastObject method
我正在嘗試從iTunes U iPhone編程講座中學習。
關於以下方法代碼,我有一個問題:
+(double) popOperandOffStack:(NSMutableArray *) stack{
double result = 0;
id topOfStack = [stack lastObject];
if (topOfStack) [stack removeLastObject];
if ([topOfStack isKindOfClass:[NSNumber class]]){
result = [topOfStack doubleValue];
}
else if ([topOfStack isKindOfClass:[NSString class]]){
if ([topOfStack isEqualToString:@"+"]){
result = [self popOperandOffStack:stack] + [self popOperandOffStack:stack];
}
if ([topOfStack isEqualToString:@"-"]){
result = [self popOperandOffStack:stack] - [self popOperandOffStack:stack];
}
if ([topOfStack isEqualToString:@"*"]){
result = [self popOperandOffStack:stack] * [self popOperandOffStack:stack];
}
if ([topOfStack isEqualToString:@"/"]){
result = [self popOperandOffStack:stack] / [self popOperandOffStack:stack];
}
}
return result;
}
即使已調用removeLastObject,仍如何訪問topOfStack。 過去,removeLastObject會向已刪除的對象發送發行版,那么topOfStack仍然有效嗎? 我猜想這與ARC相關,但是我不確定。
默認情況下,所有變量在ARC中都有一個強引用。 盡管堆棧可能會丟失對最后一個對象的引用,但是變量topOfStack仍然引用它,因此topOfStack的值不會從內存中刪除。
在ARC中,所有不帶限定符的局部變量均假定為__strong
引用。 這意味着topOfStack
是stack
的最后一個對象的強大參考。 因此,即使對象在刪除時由數組釋放,它仍保留它。 因此,在ARC自動釋放它之前, topOfStack
將一直有效,直到超出范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.