簡體   English   中英

ARC與非ARC removeLastObject方法

[英]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引用。 這意味着topOfStackstack的最后一個對象的強大參考。 因此,即使對象在刪除時由數組釋放,它仍保留它。 因此,在ARC自動釋放它之前, topOfStack將一直有效,直到超出范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM