NSMutableArray *array =NSMutableArray.alloc.init;
好奇怪的点语法!你是不是也很迷茫!
今天突然发现了点语法的一个别开生面的用法。之前从未耳闻,观之甚是怪异。很是迷茫。更诧异的是编译、运行屡试不爽。于是,便细细咀嚼一番。愚见录之以备日后参考之用。
1.验证下正确与否
NSMutableArray *array =NSMutableArray.alloc.init;
[arrayaddObject:@"1"];
[arrayaddObject:@"11"];
NSLog(@"array=====%@",array);
日志如图:
2.既然系统的sdk可以这种方法,下面尝试一下自定义方法是否可行。
2.1>自定义类的.h文件
2.2>.m文件
2.3>类方法的点语法
比较两种调用方法的区别。注意黄色警告部分!
输出日志:
结果无误,第一种是正常的调用方法、第二种是点语法的调用方法。唯一的区别就是黄色警告的区别,注意留意。
2.4>对象方法的点语法
如果类的方法能够理解,对象的点语法的调用更好理解。不再赘述。
3.带参数的方法是否可行。
两种方法的比较,注意红色错误提示!
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)这种语法特性,导致点语法的不规则使用,因此,像这种高大上的结果正确的点语法尽量不要使用,这样会误导大众、影响点语法的本质定义。