2012-06-07 14 views
5

tengo MeetingUser clase de C++ new_meetingUser es su objetoAdición de objeto de C++ en el NSMutableArray

Quiero añadir que en el meetingUsersList NSMutableArray que hice usando NSValue pero cantos hacen la manera de manejar la memoria del objeto y la propiedad de NSMutableArray.

MeetingUser *new_meetingUser = new MeetingUser(userName, dispName); 
[meetingUsersList addObject:[NSValue valueWithPointer:new_meetingUser]]; 

Respuesta

4

Puede agregar el objeto C++ a la matriz de esa manera, pero la matriz no tomará posesión del objeto. Deberá asegurarse de que el objeto no se elimine mientras está en la matriz; de lo contrario, se convertirá en un puntero colgante. Luego debe eliminar el objeto manualmente más tarde, cuando sepa que es seguro hacerlo.

Si desea que la matriz asuma la propiedad del objeto, tendrá que usar un CFMutableArray. CFMutableArray le permite especificar funciones que llaman cuando se eliminan objetos de la matriz o cuando la matriz se desasigna. En su caso, desea configurar CFMutableArray para llamar al delete en los objetos.

+0

Advertencia: Tener la matriz para eliminar los objetos podría ser peligrosa si pudiera haber otras referencias a ellos. Depende de si esta es la única forma en que los objetos se pueden agregar a la matriz. – Chuck

+0

Advertencia II: 'eliminar' no es una función, por lo que tendría que escribir una función de devolución de llamada itty para envolverlo. – duskwuff

+0

Sí. Si desea que el objeto C++ sea referenciada como un 'NSObject' normal, probablemente necesite hacer una clase contenedora que' elimine' el objeto en 'dealloc', luego agregue el objeto envoltorio al' NSMutableArray'. –

1

Esencialmente, no se puede. Los objetos C++ y Objective-C son totalmente diferentes, a pesar de que ambos se denominan "objetos". NSArray solo puede contener objetos Objective-C. No puede contener primitivas, estructuras, objetos C++ o cualquier otra cosa que no sea un objeto Objective-C. La mejor solución es crear una clase Objective-C que envuelva su clase C++ y almacene que en la matriz.

1

Un enfoque sería escribir una pequeña clase ObjC para envolver su objeto C++. Esto puede ser tan simple o tan complejo como desee; lo único importante que tiene que hacer es almacenar el objeto C++ en un campo y delete en dealloc.

Cuestiones relacionadas