NSDate *now = [NSDate date];
NSDate为一个类,data是其中的一个类方法,这里将now变量指向了NSDate这个类。[ ]中第一个是接收方,后一个是选择器。接受方用于接受选择器中的方法,选择器选择方法。
double seconds = [now timeIntervalSinceNow];
这里seconds定义为double型变量,now作为指向NSDate的实例,可以接收选择器中传入的实例方法。
timeIntervalSinceNow
返回距离Since后面的时间的时间,Now可以替换成具时间,例如1970。
NSDate *later = [now dateByAddingTimeInterval:100000];
这里dateByAddingTimeInterval的实例方法后面带了一个实参,实参用冒号与实例方法相连。此方法返回现实x秒后的时间。
unsigned long day = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:now];
这里ordinalityOfUnit这个实例方法可以带有三个实参,第一个实参传递NSDayCalendarUnit,第二个实参传递NSMonthCalendarUnit,第三个实参传递指向NSDate类的变量now。简单说就是第一个实参打开日历,第二个实参找到当前月份,第三实参找到天数。但注意这里仍然是一个消息所以接受的还是一个方法。
消息的嵌套发送
前面提到的double seconds = [now timeIntervalSinceNow];语句,在编写代码时是先编写NSDate *now = [NSDate date];语句再使用now作为接收器。使用嵌套方法可以使得程序看起来更加简洁易懂,嵌套的语句为:
double seconds = [ [NSDate date] timeIntervalSinceNow];
系统会按照从内到外的顺序执行嵌套消息,但是嵌套消息有时候会给debug带来麻烦,所以使用的时候要思路清晰。
NSDate *now = [[NSDate alloc] init];
这行语句中有两个必须以嵌套形式发送的消息:alloc和init。总体上这行语句的功能和语句NSDate *now = [NSDate date];一致,alloc的作用是创建一个新的对象,返回指向该对象指针的指针。但是通过alloc所创建的对象必须初始化才能够使用。init的作用就是初始化alloc所创建的对象。对比上面的语句我们可以知道这种方法较为麻烦,上面那一种语句称为便利语句。
nil
在oc中允许向nil指针发送消息,但是没有任何意义,返回值同样。
id delegate
在不知道所声明对象的类的时候可以使用id,id类型可以指向任意oc对象的指针。id后面不需要加*号,默认隐含。