Я работаю свой путь через Objective C Programming (2-е издание) Большой Nerd ранчо и просто наткнулся на этот пример в главе 15 (Объекты и памяти):Указатель в Objective C против C
NSDate *currentTime = [NSDate date]; //currentTime points to date object at some address ("A")
NSLog(@"currentTime's value is %p.\n", currentTime);
sleep(2);
currentTime = [NSDate date]; //currentTime now points to date object at different address ("B")
NSLog(@"currentTime's value is now %p.\n", currentTime);[/code]
Я хотел бы понять, почему currentTime изменилось с адреса A на адрес B, когда ему была назначена новая дата. Почему он не записывал данные для второй даты в ячейку памяти, используемую для 1-й даты (по адресу A)?
Это с кодом (редактирование: что ошеломляюще плохо, но я оставлю, как первоначально написана таким образом, комментарии/ответы имеют смысл):
int *i = 10;
i = 12;
не изменяет значение из & I или выделить любой дополнительная память, так что дает?
'int * i = 10;' даже недействителен; если вы объявляете «i» в качестве указателя, то и «i = 12;» также недействителен. Указатели в Objective-C ведут себя точно так же **, как они ведут себя на C, поскольку указатели Objective-C ** - это просто простые указатели C. Кажется, что вы сбиваете с толку указатель с памятью, на которую указывает. Когда вы выполняете 'currentTime = [NSDate date];', то вы перенаправляете сам указатель на новый, недавно выделенный объект NSDate. «Почему он не записал данные для второй даты в ячейку памяти, используемую для 1-й даты» - просто потому, что вы не разыменовали указатель. –
(то, о чем вы говорите, будет описываться чем-то вроде '* currentTime = * [NSDate date];', но это недопустимо, поскольку объекты Objective-C не могут быть переданы и скопированы по-значению, а только указатели на них разрешено. И все равно утечка памяти, выделенной для нового объекта.) –
Спасибо. Мне действительно нужно начать тестирование «рабочего» кода, прежде чем я его опубликую здесь. Я слишком новичок в этом, чтобы не ошибаться. Новый вопрос: почему вы не пишете это как ответ, чтобы вы могли получить еще несколько отзывов? –