Это, вероятно, вопрос, касающийся объекта alloc/keep/release, но я буду использовать NSString в качестве примера. Я знаю, что я могу сделать:obj-c NSString и alloc/retain/release
NSString* myString = [[NSString alloc] initWithString:@"Test"];
по существу выделить и инициализировать строку, на который ссылается моей переменной MyString, который я должен позже назвать [релиз туЗЬптда] на. Однако, если после того, как я делаю это, я поставил его в какой-то другой строки, такие как:
myString = someOtherString;
делает это по существу создать утечку памяти, потому что я переназначить мой указатель на другой объект и потерял все ссылки на оригинал Я выделил?
Если я просто хочу лично выделить и освободить строку, а затем изменить ее значение в разное время, должен ли я использовать другой синтаксис, отличный от '=', или перегружен, чтобы правильно изменить содержимое объекта, который первоначально представленный myString, когда я использую =.
Правильно, и утечка памяти похожа на вашу собаку, идущую по клиентам, которая высыхает, когда слово обходит вас, и вы продолжаете терять собак. – jasongetsdown
Я думаю, что ваша аналогия падает немного короче, потому что если «поводок» похож на счетчик ссылок, а собака «убегает», если у нее нет привязок к ее воротнику, тогда мой пример не так уж и будет поднимать поводок другой собаки так же, как отпускать мой поводок и поворачиваться, чтобы наблюдать за другой собакой. Похоже, что более правильная аналогия заключалась бы в том, чтобы не иметь владельцев, держащих поводки, так же как добавление поводок, который соединяется с фонарным столбом или удаляет их и т. Д. Но спасибо за это разъяснение. :) – Joey
Sheesh, все критики ... Объяснение ACBurk было отличным (программисты!) – pchap10k