Xcode - зеленые переменные x черные переменные - PullRequest
0 голосов
/ 30 января 2011

У меня есть два класса. Один был в основном создан с использованием тех же файлов, что и второй, с некоторыми другими модификациями, но они по сути одинаковы, особенно в отношении их файлов объявлений (которые имеют что-то подобное) ...

@protocol myClassDelegate <NSObject>

// delegate protocol definition

@end


@interface myClass : UIView {
 id myObject;
 UIView *oneView;
}

@property(nonatomic,assign) id<myClassDelegate> delegate;
@property(nonatomic,retain) UIView *oneView;

и тогда у меня есть @synthesize oneView, делегат; на .m

Код, который вы видите, является общим для обоих классов.

Внутри реализации обоих классов я несколько раз использую оба объекта, например:

[delegate doStuff]; // <-- do you see this blue delegate here? Xcode put it green when it is declared on .h first.

в моем первом классе каждое вхождение oneView или делегата показано зеленым цветом Xcode (см. Изображение ниже). На втором занятии они показаны черным. Я вообще считаю, что это зеленое слово является своего рода подтверждением того, что переменная была идентифицирована в объявлении и является «глобальной» для этого класса. Обычно черные переменные означают локальные экземпляры.

Вопрос в том, что у меня возникают проблемы с удалением одной из этих переменных без моего намерения именно в классе, где оно показано черным.

Эта переменная не освобождается в классе (за исключением dealloc), но объекты, созданные с использованием обоих классов, живут все время, пока приложение работает.

Что может быть не так?

exampla of what I consider correct

заранее спасибо.

Ответы [ 2 ]

1 голос
/ 31 января 2011

Полагаю, черный цвет слова в редакторе XCode означает, что XCode не обнаружил это слово как переменную экземпляра. Может быть, вы забыли объявить delegate переменную экземпляра? И ошибка при этом должна быть в освобождении delegate.

Примечание: Вы можете изменить цвета подсветки синтаксиса в XCode, посмотрев в его настройках: enter image description here

0 голосов
/ 31 января 2011

Если вы пометили свойство как assign, вы НЕ ДОЛЖНЫ отпускать его в этом классе. Это включает в Диллок. Из вашей рецензии казалось, что вы освобождаете делегата в dealloc. Обратите внимание, что вы должны установить для переменной значение nil в dealloc или, если вы знаете, что с ней покончено, так что, если делегат случайно будет освобожден где-то еще, вы не потерпите крах.

Что касается раскраски, единственное, что я думаю, может повлиять на это, если вы импортировали «MyClassDelegate» в оба файла одинаково.

...