2011-04-04 9 views
5

Como se indica en Cocoa Memory Management Rules de delanteApple cambió su regla de gestión de memoria para la convención de nomenclatura

Se toma la propiedad de un objeto si se crea empleando un método cuyo nombre comienza con “alloc” o “nuevo” o que contenga "Copiar" (por ejemplo, alloc, newObject o mutableCopy), o si le envía un mensaje de retención.

no lo han leído después de diciembre de 2010, pero desde entonces ha cambiado desde entonces a

Usted “crear” un objeto utilizando un método cuyo nombre comienza con “alloc”, “nuevo”, “ copy "o" mutableCopy "(por ejemplo, alloc, newObject o mutableCopy).

Observe que ahora, se requiere tener "copia" como prefijo. Esto dio lugar a algunas advertencias relacionadas con la memoria de Clang Static Analyzer :(. Después de buscar en las interwebs, no he llegado a una conclusión sobre por qué se cambió esto ya que esta es una de las bases de la gestión de memoria para iOS.

¿alguien sabe por qué? Gracias!

Respuesta

6

hubo algunos métodos que contenían "Copiar" en su texto, pero es evidente que no estaban copiando métodos. Por ejemplo, +[NSData dataWithBytesNoCopy:length:]. era, por supuesto, es posible utilizar las anotaciones para el analizador estático para informar sobre el comportamiento no estándar, pero en general, sospecho que casi nadie (excepto usted) alguna vez escribió un método de copia que no comenzó con copy o mutableCopy, por lo que decidieron simplificar las cosas.

Me alegro de que lo hayan hecho, francamente, ya que me encontré con el problema opuesto, donde un método contenía la palabra "Copiar" pero no tenía la intención de devolver una referencia propietaria.

+0

+1 Definitivamente esto. Esto no fue un cambio en las reglas, solo una aclaración en su documentación. –

+0

Supongo que no podrían llamarlo '+ [NSData dataWithBytesInPlace: length:]'? –

+0

es suficiente para mí :) – LaN

Cuestiones relacionadas