2012-02-05 19 views
7

¿Hay una lista de clases en iOS que no se puede consultar con un puntero __weak cuando se utiliza el recuento automático de referencias (ARC)?¿Qué clases de iOS no admiten referencias débiles?

de Transitioning to ARC Release Notes Apple sólo enumera las clases de Mac hasta el momento:

Qué clases no son compatibles con las referencias de puesta a cero-débiles?

actualmente no se puede crear referencias de puesta a cero-débil para los casos de las siguientes clases:

NSATSTypesetter, NSColorSpace, NSFont, NSFontManager, NSFontPanel, NSImage, NSMenuView, NSParagraphStyle, NSSimpleHorizontalTypesetter, NSTableCellView, NSTextView, NSViewController, NSWindow, y NSWindowController. Además, en OS X, ninguna clase en el marco de AV Foundation admite referencias débiles.

¿Existe una lista similar para las clases de UIKit o incluso para las clases específicas de iOS en general?

Gracias.

+0

A partir de 10.8, las instancias de NSWindow, NSWindowController y NSViewController pueden ser apuntadas por referencias débiles de ARC: https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKitOlderNotes/index.html# 10_8SharingService –

Respuesta

5

Si intenta formar una referencia débil a un objeto que no admite referencias débiles, el programa debería morir inmediatamente. Esto se menciona en el Objetivo-C Avances en profundidad video de WWDC 2011. Por lo tanto, debe saber de inmediato si encuentra una clase que no los admite.

Estoy bastante seguro de que la falta de mención en Transición a ARC Release Notes significa que todas las clases UIKit son seguras. No estoy seguro si la advertencia sobre las clases AV Foundation se aplica a iOS o no. Probé creando una referencia débil al AVCaptureSession tanto en iOS 5 como en Lion y ninguno se bloqueó. Probé creando una referencia débil a un NSWindow en Lion y se bloqueó con el mensaje cannot form weak reference to instance (0x102232ef0) of class NSWindow.

+0

No, el programa no murió _mediatamente_ (como en el inicio) - solo muere cuando se hace la referencia. También como se mencionó, al menos 'UITableViewCell'-descendientes no son compatibles, probado en iOS 5 iPad Simulator. – adib

+0

@adib incluya en su pregunta el mensaje de error real que recibe al intentar crear una referencia débil a una celda de la tabla. –

+0

'UITableViewCell' permite referencias débiles. Lo he probado Si recibió una excepción, publique los mensajes de la consola y el seguimiento de la pila. –

Cuestiones relacionadas