strong / weak / keep / unsafe_unretained / assign

свойства для синтеза свойства: сохранить / присвоить

  • сохранить – он сохраняется, старое значение освобождается и назначается
  • присваивать – он присваивается

свойства для владения: IOS5 = сильный / слабый IOS4 = сохранить / небезопасно

поэтому unsafe_unretained == assign?

@property (nonatomic, assign) NSArray * tmp; 

равно ?

 @property (nonatomic, unsafe_unretained) NSArray * tmp; 

и наоборот ?

если да, то какой из них предпочтительнее, когда в iOS4, или почему существует (unsafe_unretained), если он точно такой же, как назначение?

и делегат в iOS4 должен быть небезопасным или не назначен?

если да, то какой из них предпочтительнее, когда в iOS4, или почему существует (unsafe_unretained), если он точно такой же, как назначение?

вы должны использовать unsafe_unretained . Вы хотите показать читателю вашего кода, что вы действительно хотели использовать слабый, но это было невозможно, потому что слабый не доступен в версии iOS, которую вы хотите развернуть.

Однажды вы откажетесь от поддержки iOS4. И тогда вы можете просто найти unsafe_unretained и заменить все из них weak . Это будет намного проще, чем поиск assign и вычислений, если вы на самом деле означали assign или weak

Использование unsafe_unretained создает более читаемый и понятный код, где намерения разработчика легче увидеть. В основном по той же причине мы используем YES вместо 1 .

Есть несколько classов в Cocoa и Cocoa Touch, которые пока не поддерживают слабые ссылки, а это означает, что вы не можете объявить слабое свойство или слабую локальную переменную, чтобы отслеживать их. Эти classы include NSTextView, NSFont и NSColorSpace; для полного списка, см. Переход к примечаниям о выпуске ARC.

Если вам нужно использовать слабую ссылку на один из этих classов, вы должны использовать небезопасную ссылку. Для свойства это означает использование атрибута unsafe_unretained:

  @property (unsafe_unretained) NSObject *unsafeProperty; 

Для переменных вам необходимо использовать __unsafe_unretained:

 NSObject * __unsafe_unretained unsafeReference; 

Небезопасная ссылка похожа на слабую ссылку на то, что она не поддерживает жизнеспособность связанного с ней объекта, но она не будет установлена ​​в нуль, если объект назначения будет освобожден. Это означает, что вы останетесь с висящим указателем на память, первоначально занятую теперь освобожденным объектом, следовательно, термин «небезопасно». Отправка сообщения оборванному указателю приведет к сбою.

Предоставлено: Apple ( https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html ).

  • Центральное содержимое UIScrollView при меньшем
  • Добавление изображений в UITextView
  • Преобразование NSString даты в NSDate
  • Ширина пикселя текста в UILabel
  • Как читать трассировки стека объектов-c
  • Выбор случайного объекта в NSArray
  • Класс Foo реализован как в MyApp, так и в MyAppTestCase. Один из двух будет использован. Какой из них не определен
  • Как написать данные в plist?
  • Почему автореферат особенно опасен / дорого для приложений iPhone?
  • используя objc_msgSend для вызова функции Objective C с именованными аргументами
  • Каков наилучший способ перетащить NSMutableArray?
  • Interesting Posts
    Давайте будем гением компьютера.