2012-04-19 2 views
4

В этих 3 случаях у меня будет утечка памяти?Может ли локальная переменная вызывать утечку памяти с помощью ARC?

  • Нет __strong и не набор к нолю

    - (void)function { 
         NSString *string = [[NSString alloc] initWithString: @"Hello World"]; 
    } 
    
  • Нет набор к нолю, но использовать __strong

    - (void)function { 
        __strong NSString *string = [[NSString alloc] initWithString: @"Hello World"]; 
    } 
    
  • Нет __strong но установить ноль

    - (void)function { 
        NSString *string = [[NSString alloc] initWithString: @"Hello World"]; 
        string = nil; 
    } 
    

С Automatic Reference Counting (ARC), если я не установлю любое ключевое слово, я предполагаю, что переменная __strong?

+2

Нет, нет, нет и да :) – dasblinkenlight

+0

Гораздо короче будет 'NSString * string = @" Hello World ";'. В рамках метода не требуется никаких других действий. –

ответ

6

Если вы не указали квалификатор собственности, это неявно __strong. Затем, в конце локальной области, в которой объявлена ​​переменная, компилятор вставляет выпуск, независимо от того, установлена ​​ли переменная в nil.

Итак, ваша локальная переменная выпущена во всех трех случаях - без утечки.