Да, есть разница, когда вы используете свойство, вы неявно используете аксессоры, то есть:
- (UILabel*)label;
Так что в геттере может быть реализовано некоторое дополнительное поведение,например, проверка работоспособности и т. д.
Здесь вы объявили свое свойство как сохраняющее:
@property (nonatomic,retain) IBOutlet UILabel *label;
Таким образом, установщик автоматически сохранит значение для установки и освободит старое.
Использование:
[self.label release];
Вы делаете что-то опасное, когда вы отпускаете объект, который удерживается аксессорами.Поэтому, когда вы делаете что-то вроде:
self.label = nil;
Он вызывает метод - (void) setLabel:(UILabel*)label
, который освобождает реальный объект!Таким образом, объект будет освобожден дважды, что приведет к свободному доступу к объекту!
Если вы объявляете свойство, попробуйте использовать только этот член через это свойство!
Вы также можете использовать неявное объявление члена, например:
@interface MyClass
@property (nonatomic, retain) UILabel* label;
@end
@synthesize label = _label;
Член UILabel* _label
будет неявно объявлен:)