Comments 5
Понятно что автоматическое удобнее чем ручное. Интереснее было бы сравнить ARC с другими алгоритмами "сборки мусора", применяемыми в других языках.
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
// тут первая ссылка на объект
NSString *str = [[NSString alloc] initWithString:@"Hello"];
[str retain]; // увеличиваем счётчик ссылок
NSLog(@"%@", str);
[str release]; // уменьшаем счётчик
[str release]; // освобождаем объект
return 0;
}
опять будете рассказывать, что статья не сгенерирована нейросетями? Добавьте сюда лог `retainCount` и посмотрите, что он выведет на самом деле.
Привет!
Данный код приведен в демонстрационных целях и тут этот метод не выведет ничего полезного, более того метод, который Вы предлагаете добавить никакой полезной информации не несет и об этом говорит сам Apple в своей документации.
По хорошему, конкретно так, конечно, MRC не использовался, однако повторюсь - код был приведен в целях демонстрации, чтобы показать принцип работы методов retain
и release
.
Однако, если все же хочется посмотреть на количество ссылок через этот метод, то вот:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
NSMutableString *str = [[NSMutableString alloc] initWithString:@"Hello"];
NSLog(@"%lu", [str retainCount]); // 1
[str retain];
NSLog(@"%lu", [str retainCount]); // 2
[str release];
NSLog(@"%lu", [str retainCount]); // 1
[str release]; // 0
// тут вызов retainCount будет вызовет креш, так как объект удален
str = nil;
return 0;
}
Перед этим нужно будет у main.m поставить флаг -fno-objc-arc в Build phases -> Compile sources
Однако повторюсь, Apple не рекомендует использовать этот метод, как и в целом MRC 🙂
ARC в Swift