大佬教程收集整理的这篇文章主要介绍了混合C和Objective-C,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
但是在Objective-C(.mm文件)中混合这些代码时,我有几个问题:
我可以将STL容器与Objective-C或Cocos2D对象混合在一起吗?
例如.在Objective-C头文件中,可以执行以下操作吗?
#include <vector> #include <boost\shared_ptr.hpp> @interface MyClass : NSObject { std::vector<boost::shared_ptr<CCSprite> > m_spriteList; }
然后在.mm文件中,我想做
CCSprite* newSprite = [/* cocos2d stuff here... */]; m_spriteList.push_BACk(newSpritE);
上述代码是否有效?它肯定是在C,但我不知道什么时候混合C和Objective-C和Cocos2D.
2.在Objective-C中使用C智能指针对象的内存管理?
当我尝试在Objective-C中使用C代码时,我想在Objective-C头文件中声明一个C对象作为成员变量.
Test{ };
#include "test.h" #incude <boost/scoped_ptr.hpp> #include <vector> @interface MyClass : NSObject { Test* m_testObjectPtr; // (1) boost::scoped_ptr<Test> m_testOjbsmartPtr; // (2) }
在上面的代码中,是(2)还好吗?我可以像C代码一样在Objective-C中使用智能指针吗?我可以假设当MyClass对象被销毁时,将调用Test类析构函数吗?
或者如果(2)在Objective-C中不行,是(1)还好吗?我需要手动调用
在dealloc中@L_608_18@m_testObjectPtr?
std::vector<CCSprite *> spriteList;
只要确保您将其插入列表并将其删除后,将其保留.
在这两种情况下,您可以创建一个自己的智能指针,调用按照需要在constructor / destruct / copy中保留和释放,然后不用担心保留释放.
当对象被释放时,会自动调用成员c对象的析构函数.
目标c包装器的一个例子是
template<typename T> struct shared_objc_object { T *Object; shared_objc_object : Object(nil) { } shared_objc_object(T *Object) : Object([Object retain]) { } shared_objc_object(shared_objc_object &other) : Object([other.object retain]) { } ~shared_objc_object() { [Object release]; } shared_objc_object &operator =(shared_objc_object &other) { [Object release]; Object = [other.object retain]; } }
你可以使用
std::vector<shared_objc_object<CCSprite *>> spriteList; spriteList.push_BACk(some_spritE);
并不关心保留/释放
以上是大佬教程为你收集整理的混合C和Objective-C全部内容,希望文章能够帮你解决混合C和Objective-C所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。