以c++为例

用低版本的系统sdk写的程序能在高版本的系统上运行的原因是高版本的系统有低版本系统的API,所以如果高版本的系统中删除了app中用到的低版本系统sdk中的某个API,那么app在高版本系统上将无法运行。

 

用高版本系统sdk写的程序能在低版本系统上运行的原因:

第一种可能是app中并没有用到高版本系统新增的api。

第二种可能是app中虽然用到了高版本系统新增的api,不过这个新增api只有在高版本的系统上才被调用。

c++处理这种情况必须还是用低版本的sdk编译,不过通过判断系统版本,再通过显示运行时加载高版本系统的dll,动态获取到高版本系统API的指针,然后用这个指针去调用相应的函数,但是代码中不能直接出现高版本系统的API的函数名

 

OC中也通过判断系统版本,因为直接通过message_send的方式来调用指定函数(因为编译的时候函数名都会转化成字符串,作为message_send的一个参数),所以还是可以用高版本的sdk编译,因此在代码中可以出现高版本系统的API的函数名

 

从IDE的角度来看,以OC举例,如果代码中用到了高版本sdk的api,那么必须用包含高版本sdk的IDE来编译,用低版本sdk的IDE编译的话因为低版本sdk中不存在高版本sdk的api,那么编译必然会报错。

 

所以OC通过messageSend方式调用函数的方式在支持多个系统方面写代码很方便。

posted on 2019-12-11 02:33  ximenchuixie  阅读(264)  评论(0编辑  收藏  举报