ли следующие условия:@property из Objective-C
слабый = unsafe_unretain = присвоить
сильные = сохраняют
Если почему они дублируются? Какой из них выбрать?
ли следующие условия:@property из Objective-C
слабый = unsafe_unretain = присвоить
сильные = сохраняют
Если почему они дублируются? Какой из них выбрать?
Нет, это неправда. weak
означает, что объект не сохраняется, и, кроме того, значение переменной/будет автоматически установлено на нуль, когда объект будет освобожден. unsafe_unretained
означает, что объект не сохранен, но нет автоматического обнуления. strong
и retain
эквивалентны.
weak
! = unsafe_unretain
weak
автоматически преобразует его указатель на nil
, если объект он указывает на это освобождаться.
Двигаясь вперед, вы должны использовать strong
weak
& для объектов и assign
для примитивных типов
если объект освобожден, а указатель на него не установлен на ноль, то что указывает указатель на данный момент? – itenyh
Указывает на освобожденную память. Если вы попытаетесь получить к нему доступ, ваше приложение выйдет из строя. – trapper
, если он установлен в ноль, ничего не произойдет? – itenyh
assign
обычно используется для примитивов, как int
или double
, так как вы просто назначая. unsafe_unretained
используется для объектов Objective-C, которые вы знаете не сохраняются и понимаете, почему это небезопасно. weak
- это новая функция, представленная в iOS 5, которая похожа на unsafe_unretained
, но имеет различную семантику с ARC. Ознакомьтесь с руководством Apple Advanced Memory Management для получения дополнительной информации.
На практике вы почти никогда не будете использовать unsafe_unretained
, если вы настроите iOS 5 или выше.
+1. и http://clang.llvm.org/docs/AutomaticReferenceCounting.html – 0x8badf00d
, поэтому, если включен ios4, небезопасным будет выбран выбор? – itenyh
большую часть времени, да. –
strong
: переменная сохраняется во время ее применения. сохранить также работает как синоним сильного.copy
: создает и сохраняет копию.weak
: используйте его, чтобы указать на объект, не требуя права собственности. После того, как объект будет выпущен, указатель будет нулевым.unsafe_unretained
: тот же, что и слабый, но не ноль указателя после выпуска.assign
: примитивные значения.Если вы ориентируетесь на iOS 4, вы не можете использовать слабый. Вместо этого используйте unsafe_unretained.
Прежде чем ARC, свойства по умолчанию были назначены, теперь по умолчанию сильно.
, если объект освобожден, и указатель на него не обнуляется (не установлен на ноль), так что указывает указатель на данный момент? – itenyh
Он будет указывать на то же место в памяти, что и объект, но попытки получить к нему доступ (путем отправки сообщения ему) могут привести к сбою EXC_BAD_ACCESS. Другими словами, произойдут плохие вещи, что объясняет преимущество использования свойства «слабый». Сообщения в 'nil' являются доброкачественными и просто ничего не делают в Objective-C. –