几个很小很小的知识点

使用脚本语言开发游戏,在原生中,与原生交互是比较多的,在CocosCreator中,有直接与Java/Objective-C交互的方式。
那么各位有没有发现几个奇怪的点

  1. 调用Java需要加上签名?

-解释:

因为Java有重载(Overload)的特性。想深入了解的,可以自行百度,简单点讲,java允许方法名重复,只要方法对应参数类型或参数个数中某一个不同就可以了。例如下面的方法,在同一个类中是被允许的:

1
2
3
4
5
public void a();
public void a(String a);
public void a(int a);
public void a(String a, int a);
public void a(int a, String a);
  1. 调用Java签名时,String对应的是”Ljava/lang/String;”?

-解释:

int对应”I”,boolean对应”Z”,float对应”F”,可是,String对应的却不是”S”,如果你使用编辑器就会发现,int、boolean、float在java中都是没有”导包”的,因为他们是基本类型,而String在java.lang.String中,因为String是一个类。

  1. 调用Objective-C的方法,方法的”:”要加上,却又不用加上签名

-解释:

  • Object-c没有重载的概念,即方法名相同,而参数类型不同,在Object-c中是不允许的。例如
    1
    2
    -(void)a:(NSString *)a;
    -(void)a:(NSNumber *)a;
    这样是不允许的。
  • Objective-C的方法,加上:才是一个整体。例如:
    1
    -(void)a:(NSString *) a andB:(NSString *)b;
    并不是说这个方法的方法名是a,而是a:andB:
  1. 调用Ocjective-c,数字类型用的是NSNumber,这是什么类型?

-解释

如果没有接触过object-c的,很容易被误导为NSNumber是一种基本类型,或者直观感觉,NSInteger等继承自NSNumber,其实这是错误的。

  • NSNumber是一个类,而且与NSInteger没有任何继承关系,他的父类是NSValue。
  • NSInteger等是基本数据类型。

今天的分享就是这些,嗯,真的是很小很小的知识点~

文章目录