Просто еще одна вещь, чтобы подтвердить, что некоторые люди копируют / вставляют пример кода из Интернета, чтобы начать. Убедитесь, что вы здесь MySQL:
... $dbh = new PDO ("mysql: ...
В некоторых примерах это показывает
$dbh = new PDO ("dblib ...
Если Вы следуете за тем, что теперь считается лучшей практикой, Вы должны свойства выхода выпуска, потому что необходимо было сохранить их в средстве доступа набора:
@interface MyController : MySuperclass {
Control *uiElement;
}
@property (nonatomic, retain) IBOutlet Control *uiElement;
@end
@implementation MyController
@synthesize uiElement;
- (void)dealloc {
[uiElement release];
[super dealloc];
}
@end
преимущество этого подхода состоит в том, что он делает семантику управления памятью явной и ясной, , и он последовательно работает через все платформы для всех файлов .
пераПримечание: следующие комментарии применяются только к iOS до 3,0. С 3,0 и позже, Вы должны вместо этого просто ноль значения свойств в viewDidUnload.
Одно соображение здесь, тем не менее, состоит в том, когда Ваш контроллер мог бы избавиться от своего пользовательского интерфейса и перезагрузить его динамично по требованию (например, если у Вас есть контроллер представления, который загружает представление из файла пера, но по запросу - говорят под давлением памяти - выпускает его, с ожиданием, что оно может быть перезагружено, если представление необходимо снова). В этой ситуации Вы хотите удостовериться, что, когда основное представление расположено Вас также, оставляют владение любых других выходов так, чтобы они также могли быть освобождены. Для UIViewController можно заниматься этой проблемой путем переопределения setView:
следующим образом:
- (void)setView:(UIView *)newView {
if (newView == nil) {
self.uiElement = nil;
}
[super setView:aView];
}
, К сожалению, это дает начало дальнейшей проблеме. Поскольку UIViewController в настоящее время реализует dealloc
метод с помощью setView:
, метод доступа (вместо того, чтобы просто выпустить переменную непосредственно), self.anOutlet = nil
назовут в dealloc
, а также в ответ на предупреждение памяти... Это приведет к катастрофическому отказу в dealloc
.
средство должно гарантировать, что переменные выхода также установлены на nil
в [1 110]:
- (void)dealloc {
// release outlets and set variables to nil
[anOutlet release], anOutlet = nil;
[super dealloc];
}
Я нашел то, что я искал в документах Apple. Короче говоря можно настроить объекты как свойства, которые Вы выпускаете и сохраняете (или просто @property, @synthesize), но Вы не имеете к для вещей как UILabels:
Любой IBOutlet, который является подпредставлением основного представления Вашего Nib, не должен быть выпущен, потому что они будут отправлены сообщение автовыпуска после создания объекта. Единственный IBOutlet's, который необходимо выпустить в dealloc, является объектами верхнего уровня как контроллеры или другой NSObject's. Это все упоминается в документе Apple, связанном с вышеупомянутым.
Вы делаете выделение маркировка, в некотором смысле, путем создания его в IB.
то, Что делает IB, является взглядом на Ваш IBOutlets и как они определяются. Если у Вас будет переменная класса, что IB должен присвоить ссылку на некоторый объект, IB отправит сохранить сообщение в тот объект для Вас.
при использовании свойств IB использует свойство, необходимо установить значение и не явно сохранить значение. Таким образом Вы обычно отмечали бы свойства IBOutlet, как сохраните:
@property (nonatomic, retain) UILabel *lblExample;
Таким образом в случае эфира (использующий свойства или не) Вы должны разъединение вызова в своем dealloc.
[anOutlet release], anOutlet = nil;
Часть является абсолютно лишней, если Вы записали setView: правильно.
Если вы не отпустите его при освобождении, это увеличит объем памяти.
См. Более подробную информацию об инструменте ObjectAlloc graph