¿Qué significa realmente la siguiente línea?
string = @"Some text";
Suponiendo que "cadena" se declara thusly en la cabecera:
NSString *string;
¿Qué significa el "=" en realidad lo hacen aquí? ¿Qué hace al recuento de referencias de "cuerdas"?
string
no es una cadena.
string
es, de hecho, ningún otro tipo de objeto de cacao, tampoco.
es una variable que ha creado para contener una instancia de NSString. El operador de asignación pone algo en una variable *. En su ejemplo anterior, crea una cadena literal y la coloca en la variable.
Dado que string
es un objeto variable, no un objeto Cocoa, no tiene recuento de referencias.
Asignar un objeto en algún lugar puede prolongar la duración del objeto en código recogido de basura (solo en Mac). Ver the Memory Management Programming Guide for Cocoa para más detalles.
* O una matriz C. No confundas estos con arreglos de Cacao; no son intercambiables, y no puede usar el operador de asignación para poner cosas en una colección de Cocoa (no en Objective-C, de todos modos).
Gracias! Eso es lo que esperaba con respecto a la asignación del puntero ... ... Aah, entonces el "-1" retiene el recuento después de la asignación (es decir, [string retainCount]) es un indicador que indica que "cadena" apunta a un literal de cadena que por lo tanto, no necesita ser administrado, ¿pero puede ser liberado de manera segura? – notMyScreenName
El "conteo de retención" de -1 después de la asignación indica que nunca debe prestar atención al conteo absoluto de retención de ningún objeto. Si lo conservas, debes liberarlo. Eso es todo. Ese @ "" strings no necesita retener/liberar es un detalle de implementación que, técnicamente, no se debe confiar. Sin embargo, todos lo hacen y todo se rompería si la implementación cambiara. – bbum