我在Objective-C(用于iPhone)中编写了一些小程序,但最终我想用C ++编写程序。 (我发现它更容易。)
如果是这样,我将如何:
谢谢! 德里克
答案 0 :(得分:1)
是。 C ++有一个delete
关键字,但它只适用于你用new
创建的对象(对于惯用的C ++代码,它不是每个对象)。 C ++也没有内置的引用计数,只有纯粹的所有权。
如果您创建一个扩展名为.mm
的源文件,它将编译为Objective-C ++,它允许您混合使用Objective-C和C ++代码。
对于字符串,您可以致电std::string::c_str()
以获取可以传递到+[NSString stringWithUTF8String:]
的字符串。
我的两分钱:如果你觉得C ++比Objective-C容易得多而且你对C ++中的内存管理一无所知,你应该花费相当多的时间学习纯C ++;如果你不知道自己在做什么,那就非常容易用C ++进行自拍。
答案 1 :(得分:0)
用C ++管理内存? (C ++是否有我需要使用的类似于发布的命令?)
c ++使用new
和delete
。特别是,c ++程序更喜欢使用范围限制资源管理(SBRM)。使用这些容器时,管理动态分配很容易。但是,引用计数目前尚未内置于该语言中 - 您可以将boost www.boost.org用于更高级的指针容器,包括那些提供引用计数的容器。
Intermix C ++和Objective-C编码? (甚至,我应该吗?)
您可以使用扩展名.mm
或.M
或使用编译器标记轻松完成。请注意,您不应仅仅将所有内容都设置为objc ++ - 这会损害您的构建时间。还要注意,有一些限制,包括无法将c ++类型子类化为objc类型,反之亦然。任何理智的c ++ dev将启用的另一个重要标志是当你在objc类中使用c ++类型作为变量时生成c ++构造函数/析构函数调用的标志。否则,你只会崩溃,被迫使用pimpl,或者必须手动构建/破坏所有的c ++实例(如objc类型中的ivars)。这意味着您使用的这些类型都需要默认构造函数。你可以混合使用这些语言,如果你喜欢的话可以这么做。还有一些关于在苹果文档中混合它们的注释,但那些是重要的...哦,小心隔离你的例外(你也必须用objc)。
获取C ++对象,如字符串,并将其转换为NSString?
见John Calsbeek的回应
祝你好运