Я знаю, что дискуссии о кодировании стилей имеют тенденцию заканчиваться в бедствии и бесконечных войнах пламени, но это не то, чего я хочу достигнуть. В течение прошлого десятилетия я главным образом видел два различных кодирующих стиля для dealloc
методы в Цели-C. Первый и наиболее распространенный должен был поместить dealloc
в нижней части файла. Это - также стиль использование Apple в шаблонах XCode по умолчанию. Логика позади этого, кажется, это dealloc
призван, когда конец подходов объекта, таким образом, конец файла, кажется, хорошая метафора.
С другой стороны, несколько человек склонны помещать dealloc
непосредственно ниже @synthesize
директивы. У этого есть два главных недостатка, по-моему:
Огромное преимущество, по-моему, состоит в том, что у Вас есть прямая визуальная связь между свойствами и передачей release
сообщение.
Другая вещь - niling, уже выпустил переменные. В то время как я не думаю, что это необходимо, особенно в контексте объекта, где целая переменная разрушена после dealloc
концы, я ухаживаю к также нолю за переменными. Я используюсь, чтобы сделать это для переменных в объеме функции, таким образом, я просто согласовываюсь со своим кодирующим стилем.
Это - то, как большинство моих классов похоже:
@implementation Bar
@synthesize foo;
- (void)dealloc
{
[foo release], foo = nil;
[super dealloc];
}
// Initializers and other methods…
Я уже упомянул несколько за и против. Что Вы думаете об этой теме? Каково кодирование, разрабатывают Вас использование в dealloc
и почему? Есть ли другие за и против, которые я забыл упоминать?
Я не хочу начинать войну пламени здесь. Я просто хочу знать то, что разрабатывает Вас использование и если у Вас есть определенные причины этого или если это не имеет значения для Вас в конце.
Мне нравится поставить DEALOC
реализацию ниже инициализации. Таким образом, когда я добавляю новую переменную экземпляра, я не забываю в выпуск
, он сразу после I init
.
Кроме того, я нахожу это действительно полезным для использования Директивы #Pragma
Директива , чтобы облегчить просматривать файл. Так что я «группирую» init init
и DEALOC
методы вместе под заголовком под названием «Инициализаторы». При просмотре файла, наличие этих заголовков, упрощает намного проще найти то, что вы ищете без отвлечения Dealoc
.
Это может быть скучный код, но человек это важно.
Я положил его внизу. Это позволяет мне просто ударить и идти к нему, когда добавляю что-то, что нужно deaillocation. Я также не хочу, чтобы это его синтезаторы недвижимости, потому что это обманчиво . Не все, что я делаю, обязательно имеет синтезированный доступ к нему. Черт возьми, это даже не обязательно все в инициализаторе. Если я попытаюсь использовать ярлык таким образом, я, вероятно, испортил это.
Не устанавливайте свой ивар в DEALOC, если у вас нет конкретной причины. Он не обслуживает цели и в лучших масках программистов, которые вы будете лучше узнать о том, что скрываются.
Я поставил свой Dealoc на вершине, именно под директивами @synTheSize. Это немного неуклюжем и скучный код, но OH-SO-важный код, поэтому он получает высшие счета. Кроме того, возможность сравнения между свойствами и -ресами жизненно важно.
Возможно, можно вычислить кривизну. Если значение кривизны велико, скорость замедляется. http://en.wikipedia.org/wiki/Curvature
-121--3367045- При добавлении нового сообщения вызовите scrollRectToVisible ()
в JList
с помощью Rectangle
, имеющего те же размеры, что и предпочтительный размер панели сообщений. Учитывая вертикальную ориентацию, может быть удобно сделать предпочтительный размер JScrollPane
JViewport
интегральным кратным высоте панели сообщений. См. также: Использование панелей прокрутки .
Добавление: Это убедительное обсуждение Прокрутки текстовой области также может быть полезным.
-121--2650682-- (id)init{
self = [super init];
if( self ) {
someVar = [[NSMutableArray alloc] init];
// something like the following shouldn't be released:
someString = [NSString stringWithFormat:@"ANumber: %d",10];
}
return self;
- (void)dealloc{
[someVar release]; someVar = nil;
[super dealloc];
}
именно так я это и делаю:)
Мой заказ:
@динамичные
директивы (я начал делать это сверху примерно в 2011 году; ранее они были в реализации аксессора)+load
, +initialize
, +sharedFoo
, другие)dealloc
завершают
#pragma mark
)В методе dealloc
:
nil
. Объект частично деблокирован; почему вы все еще посылаете ему сообщения? (Если нет, то ничто не смотрит на значения ivars.)nil
) Не злоупотребляйте оператором запятой. В выражении типа [foo release], foo = nil
смешиваются типы (сначала void
из выражения сообщения, затем id
из выражения присваивания). Это отдельные операторы; запишите их как таковые. [super dealloc]
всегда последняя и всегда имеет пустую строку над ней, подчеркивая ее наличие. Конечно, у меня также включено "Обращаться с предупреждениями как с ошибками", так что если я забуду [super dealloc]
, то сломаю свой билд.