Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 添加c++;NSMutableArray中的对象 我已在使用用户C++类;new_meetingUser是它的目标_Iphone_Objective C_Ios - Fatal编程技术网

Iphone 添加c++;NSMutableArray中的对象 我已在使用用户C++类;new_meetingUser是它的目标

Iphone 添加c++;NSMutableArray中的对象 我已在使用用户C++类;new_meetingUser是它的目标,iphone,objective-c,ios,Iphone,Objective C,Ios,我想将它添加到NSMutableArray meetingUsersList中,这是我使用NSValue完成的。但是,我不知道如何处理对象的内存和NSMutableArray的所有权 MeetingUser *new_meetingUser = new MeetingUser(userName, dispName ); [meetingUsersList addObject:[NSValue valueWithPointer:new_meetingUser]]; 可以将C++对象添加到数组中,

我想将它添加到NSMutableArray meetingUsersList中,这是我使用NSValue完成的。但是,我不知道如何处理对象的内存和NSMutableArray的所有权

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

可以将C++对象添加到数组中,但是数组不会占用对象的所有权。您必须确保对象在数组中时未被删除,否则它将成为悬空指针。然后,当您知道这样做是安全的时,您必须稍后手动删除该对象


如果希望数组拥有对象的所有权,则必须使用
CFMutableArray
CFMutableArray
允许您指定从数组中删除对象或取消分配数组时调用的函数。在您的情况下,您希望将
CFMutableArray
设置为调用对象上的
delete

基本上,您不能。C++对象和ObjtoVc对象是完全不同的事物,尽管两者都被称为“对象”。它不能保存基元、结构体、C++对象或任何不是Objto-C对象的其他对象。最好的解决方法是创建一个ObjtoE-C类,它封装了C++类并将其存储在数组中。

< P>一种方法是编写一个小Objc类来包装C++对象。这可以是简单的或复杂的,因为它需要做的唯一的事情就是把C++对象存储在一个字段中,并且<代码>删除<代码>它在<代码> DELOLC/。这取决于这是否是将对象添加到数组中的唯一方法。警告二:
delete
不是函数,因此您必须编写一个小比特回调函数来包装它。是的。如果你想把C++对象引用成一个普通的< <代码> NSObjs< /C> >,你可能需要编写一个包装类:<代码>删除< /Cord> s,在代码< DELOLC/<代码>中,然后将包装对象添加到<代码> NSMutableArray < /C> >。它实际上只持有一个指针。