IOS中点语法的变态用法(我叫做不法用法)

 NSMutableArray *array =NSMutableArray.alloc.init;

好奇怪的点语法!你是不是也很迷茫!

今天突然发现了点语法的一个别开生面的用法。之前从未耳闻,观之甚是怪异。很是迷茫。更诧异的是编译、运行屡试不爽。于是,便细细咀嚼一番。愚见录之以备日后参考之用。

1.验证下正确与否

    NSMutableArray *array =NSMutableArray.alloc.init;

    [arrayaddObject:@"1"];

    [arrayaddObject:@"11"];

    NSLog(@"array=====%@",array);

日志如图:

IOS中点语法的变态用法(我叫做不法用法)_第1张图片一切无误,警告都没有。

2.既然系统的sdk可以这种方法,下面尝试一下自定义方法是否可行。

   2.1>自定义类的.h文件

   IOS中点语法的变态用法(我叫做不法用法)_第2张图片

   2.2>.m文件

   IOS中点语法的变态用法(我叫做不法用法)_第3张图片

  2.3>类方法的点语法

  IOS中点语法的变态用法(我叫做不法用法)_第4张图片

比较两种调用方法的区别。注意黄色警告部分!

  输出日志:

  

 结果无误,第一种是正常的调用方法、第二种是点语法的调用方法。唯一的区别就是黄色警告的区别,注意留意。

  2.4>对象方法的点语法

  如果类的方法能够理解,对象的点语法的调用更好理解。不再赘述。

3.带参数的方法是否可行。

IOS中点语法的变态用法(我叫做不法用法)_第5张图片

两种方法的比较,注意红色错误提示!

4.总结:

   4.1>所有类方法和对象方法都可以用点语法进行调用

   4.2>带参数的类方法和对象方法不可以

   4.3>归根结底的原因就是 由于OC的语法特性----弱语法!

   4.3.1)所有的点语法本质上都是setter方法和getter方法。不满足setter方法和getter方法的点语法都是由于OC语法弱性导致的不合法的点语法。

   4.3.2)由于语法弱性,所有的点语法OC都会默认为setter方法和getter方法处理,会去类中查找有没有这个方法。只要有这个同名的方法,就会调用。从上面的黄色提示:getter方法没有接受返回值;红色提示:类中没有这个属性(即找不到这个setter方法和getter方法)

  4.3.4)这种语法特性,导致点语法的不规则使用,因此,像这种高大上的结果正确的点语法尽量不要使用,这样会误导大众、影响点语法的本质定义。




你可能感兴趣的:(ios,getter,setter,iPhone6,点语法)