小结 C++与Objective-c的编写代码的一些区别

过完年后,回来开始准备做些iphone的应用软件,于是开始学xcode,学mac,学objective-c。经过半个月的时间开发学习,尽管每天学习查资料的时间远远超过了自己实际写代码的时间,付出总有回报,我先把一些自己认为的C++和Objective-c的不同的地方,罗列一下,包括这几天自己遇到的几个暗坑,真的坑死人了。


1.写协议的时候,objective-c多了两关键字:

@optional,说明以下方法在继承类中,可实现,也可不实现。

@required,说明以下定义的方法,在继承类中必须实现。

2.编译类型。xcode属于运行时动态编译,VC则属于静态编译。个人理解,静态编译利于提前检查代码包括语法错误,动态编译则必须等程序运行了,才会区判断函数,类的各种关系。用很多以前VC的习惯来写XCode项目,很多奇怪的错误,就时这个引起的。

2.函数返回值检查。VC会自动检测有乌返回值,没有,就编译不过去,XCode不会检查,没有的话,等你程序运行到这的时候就会挂调。

3.XCode里可以用#include,也可以用#import,对与Objective-c的代码,最好用#import,因为,多次多一个文件使用#include,会导致重复定义的问题,#import则不会,原因是,#import会判断,#include就不会。

4。Objective-c因为所有的类都继承超类NSOject,所以它能实现那些很有用的反射机制,比如。通过类名,创建类,通过函数名,直接调用某个类的同名函数。C++这些功能就没有,想要的话,就只能自己写代码实现了。

5.新的Xcode使用了ARC机制,比如你定义了局部变量,有了它,你就不用在函数的结尾给它写上减少引用计数了,而且如果你写了,它还会给你报错,我在这里也卡过,因为是别人写的代码,拿到我代码里,这个地方就是编译不通过,解决的办法就是可以在XCode的设置里,把这个功能关掉。

6.平行扩展类的函数可能是Objective-c的独有功能吧。它的功能就是不用继承,而给原先有的类给扩展了,加了自己定义的接口。在要用的时候,包括你这个定义接口的文件即可。定义方法就是

@interface NSDate (Additions)   NSDate 原先的类,Additions用于标记扩展的名字,可以自定义。

7.Objective-c的容错机制比较强,很多时候空指针不会报错,空指针调用函数也不报错,所以得用代码检查,否则实现不了效果,VC,则是有空指针,必错,除非你用try...catch...模块。

8.静态函数。Objective-c是用+号表示,而且在它得函数内部,竟然可以引用Self,其实这时候引用得这个Self,并不是这个类自己,具体是什么我也不知道,还得查资料看,我的一个卡了我大半天的错误,就是在这里发生的,原因就是我没注意到这是个静态函数。写C++的时候从来没发生过这种错误。

9.block编程,这个在新的Objective-c库里有很多使用,它的定义是这样的 

void (^_functionName)(void); 语法很奇怪。


10.引入第三方Lib库时,最好要在XCode里的Build Setting->Other link flags 里加上-all_load,意思是告诉编译器,给我加载所有lib。我有个问题,就是因为我某断代码引用了第三方Lib里的平行扩展接口(见6条),然后能编译过去,但是程序就是在这个地方会挂掉。我也是找了很久,才找到这个问题的解决方法,就是加上上面的-all_load.


以上就是自己半个月来,所学到的和涉及到的关于语言和代码编辑器差异方面的问题。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值