Ошибка CLang (цель C): значение, сохраненное во время инициализации, никогда не читается - PullRequest
2 голосов
/ 15 апреля 2010
Foo *oFoo = [[[Foo alloc] init] autorelease];

Это то, как меня учили программировать в Цели C, но средство проверки ошибок CLang жалуется, что начальное значение никогда не читалось. Но oFoo - это объект со свойствами. У самого oFoo нет единого значения. Значения свойств имеют значение.

oFoo.PropertyA = 1;
oFoo.PropertyB = @"Hello, World."

Должен ли я просто игнорировать это? Это стоит исправить? Что за исправление, когда в моем контексте «начальное значение» не имеет смысла?

Ответы [ 2 ]

9 голосов
/ 15 апреля 2010

Обычно это означает:

  1. Вы создали переменную.
  2. Вы присвоили некоторое значение переменной.Не имеет значения, для себя или для его свойств.
  3. Вы "воссоздали" это значение или законченный блок (метод / для каждого / и т. Д.).

Дляпростой тип:

int a;
a = 2;
a = 3;

Первое значение (2) никогда не используется.Подобные вещи могут происходить с объектами, например:

Foo *oFoo = [[[Foo alloc] init] autorelease];

oFoo.PropertyA = 1;
oFoo.PropertyB = @"Hello, World."

oFoo = [[[Foo alloc] init] autorelease];

Здесь первый блок alloc-init создал значение, которое было переопределено вторым alloc-init.И ошибка говорит что-то вроде этого.

Вместо второго блока alloc-init я могу закрыть реализацию метода, которая будет похожа.

0 голосов
/ 16 апреля 2010

Я думаю, что Александр Бабаев может быть прав. Вот фактический код:

Part *oPart = [[[Part alloc] init] autorelease];
iParts = aParts.count;
for (iPart=0;iPart<iParts;iPart++) {
    oPart = [aParts objectAtIndex:iPart];

aPart - это массив объектов Part. Возможно, мне следует исключить первую строку, а последняя строка должна выглядеть следующим образом:

Part *oPart = [aParts objectAtIndex:iPart];

Если я это сделаю, мне НЕ нужно явно освобождать oPart в конце цикла. Объявляя oPart перед началом цикла, я пытался быть эффективным и просто повторно использовать объект oPart, а не создавать / освобождать каждый раз в цикле.

Кто-нибудь знает, какой подход лучше?

...