Вызов 'выпуска' слишком много раз?

Я смотрел на чужой код и заметил, что они назвали 'выпуск' на NSString, которым они не владели (никогда не называл выделение/сохранять/копию нигде, и это не было свойство).

Это выглядело немного странным для меня, и это заставило меня задаться вопросом, может ли странное поведение произойти при вызове 'выпуска' на объекте, которым Вы или не 'владеете' или чей касательно количества уже 0? Код ниже компилирует/хорошо работает без предупреждений, таким образом, я предполагаю, что нет никакой проблемы, но мне было просто любопытно.

// Releasing an object I don't own
NSString *notMyString = [NSString stringWithString:@"Not mine."];
[notMyString release]; // Ignored?

// Releasing an object I own, twice
NSString *myString = [[NSString alloc] initWithString:@"Mine."];
[myString release]; // Ref count = 0
[myString release]; // Ref count = ?
5
задан JasonMArcher 29 November 2014 в 03:17
поделиться

1 ответ

Ага, не делай этого. Ваша оценка верна, как и ваше понимание правил владения. Отправка сообщения уже выпущенному объекту имеет неопределенное поведение - иногда вам повезет из-за того, что происходит что-то еще, и ничего не произойдет. Иногда происходит сбой сразу, иногда позже, потому что вы что-то испортили.

15
ответ дан 18 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: