Какие классы iOS не поддерживают обнуление слабых ссылок? - PullRequest
7 голосов
/ 05 февраля 2012

Есть ли в iOS список классов, на которые нельзя ссылаться указателем __weak при использовании автоматического подсчета ссылок (ARC)?

Apple Переход к заметкам о выпуске ARC пока перечисляет только классы Mac:

Какие классы не поддерживают ссылки со слабыми нулями?

В настоящее время нельзя создавать слабые по нулям ссылки на экземпляры следующих классов:

NSATSTypesetter, NSColorSpace, NSFont, NSFontManager, NSFontPanel, NSImage, NSMenuView, NSParagraphStyle, NSSimpleHorizontalTypesetter, NSTableCellView, NSTextView, NSViewController NSWindow и NSWindowController. Кроме того, в OS X классы в платформе AV Foundation не поддерживают слабые ссылки.

Есть ли подобный список для классов UIKit или даже для iOS-классов в целом?

Спасибо.

1 Ответ

5 голосов
/ 05 февраля 2012

Если вы попытаетесь сформировать слабую ссылку на объект, который не поддерживает слабые ссылки, программа должна немедленно умереть. Это упомянуто в документах Objective-C глубины видео от WWDC 2011 . Поэтому вы должны немедленно узнать, найдете ли вы класс, который их не поддерживает.

Я почти уверен, что отсутствие упоминания в Переходе к заметкам о выпуске ARC означает, что все классы UIKit безопасны. Я не уверен, относится ли предупреждение о AV Foundation классах к iOS или нет. Я протестировал создание слабой ссылки на AVCaptureSession как на iOS 5, так и на Lion, и ни одна из них не вылетела. Я протестировал создание слабой ссылки на NSWindow на Lion, и он вылетел с сообщением cannot form weak reference to instance (0x102232ef0) of class NSWindow.

...