• 记录了群里2016-02-22至2016-02-28讨论的一些问题,如有错误还望告知。
1. 关于Objective-C链式编程的“点语法”
1
2
3
4
5
6
7
8
9
person.run();
- (Person * (^)())run {
Person * (^block)() = ^(){
NSLog(@"run");
return self;
};
return block;
}
  • 问题描述:对于链式编程有个疑问,run不是set get方法,为什么可以用点操作符?
  • 问题讨论:大概是因为.run返回block然后返回block(),文章iOS利用block实现链式编程方法中指出:block具有一个函数的外观,又被当作一个变量。那么block就具备两个功能,第一:可以作为类的属性被’点’出来。第二:可以当作函数直接调用。下面逐个解释,第一个类的属性可以点出来,比如person.name;这很好理解,你一定见过,str.length;对吧。第二个呢,block作为一个变量,但是又可以把它当作指向函数的指针一样调用。
  • 追加问题:还有个问题,就是任何方法都可以用点操作调用, 例如 person.eat ,运行正常,但是调用时会有个警告.property access result unused - getters should not be used for side effect.这是什么意思?我以为点操作符调用都是只能用在set get方法上的
  • 追加问题结果:出现警告的原因就是点操作符会展开成get方法,而没变量来接收的话就会出现警告。无参方法才能点操作符调用,但是一般不这么用,有参数的方法就不能用点操作符了,因为编译器认为不是get方法,所以不带参数的方法,系统就认为是get方法。(这个是提问者自己后来经过查询测试得出的结论)
  • 304,602