Я предполагаю, что вы @synthesize
эти свойства.Если вы этого не сделаете, вам придется освободить себя вручную.Вы совершенно правы в своем предположении, что если вы продолжите сохранять, когда свойство установлено, вы потеряете память.
Давайте подумаем .... как выглядели свойства раньше, чем мы привыкли @synthesize
оператор?
id _propertyName; // the ivar
- (id) propertyName {
return _propertyName;
}
- (void) setPropertyName:(id)v {
if (_propertyName) {
[_propertyName release]; // release the previously retained property
}
_propertyName = [v retain]; // retain this one so it doesn't fly away on us
}
Теперь вам не нужно набирать этот материал, потому что @synthesize это круто и генерирует его для вас, он также будет генерировать блоки @synchronized
, если вы не укажете что-то какбудучи nonatomic
, что тоже довольно рад.
Если вы укажете assign
вместо retain
, вы получите что-то вроде этого
id _propertyName; // the ivar
- (id) propertyName {
return _propertyName;
}
- (void) setPropertyName:(id)v {
_propertyName = v;
}
Это примерно единственноевещь, которую вы МОЖЕТЕ сделать, когда вещи не являются объектами, потому что они являются только значениями (также иногда называемыми типами значений, объекты являются ссылочными типами).Поскольку типы значений не могут быть сохранены, другой тип блока не будет иметь никакого смысла.Попытайтесь создать свойство сохранения с помощью BOOL и посмотрите, что LLVM или GCC скажут вам делать с чем;)