《Objective-c 编译》(第2版) p92
程序有省略
# import <Foundation/Foundation.h>int main(int argc, const char *argv[])
{
   @autoreleasepool{
     NSDate  *now=[NSDate date];    //变量*now,是个指针变量,对么?
     double  seconds=[now  timeIntervalSince1970];  //这语句,是消息发送语句,其中now,是指针,还是非指针?
   }
   return 0;
}

解决方案 »

  1.   

    NSDate  *now=[NSDate date];
    [NSDate date]; date是NSDate这个类的类方法,会返会一个指向当前日期的日期对象,*now就是指向这个实例的指针(其实now就可以理解为当前日期对象,因为一切对象皆之争)double  seconds=[now  timeIntervalSince1970];
    上面已经说了,这个now就是一个对象,这个语句就是简单的调用now对象的timeIntervalSince1970这个方法而已(在oc中调用对象的方法确实是通过发送消息),这个方法的作用是返回从1970年开始到now这个日期为止中间的所有秒数,注意这里有个坑,返回的double中最后3位是毫秒,你要获取秒数的话要去掉最后3位
      

  2.   


    你的意思是:对象都是指针?1.NSDate  *now=[NSDate date];
    上面语句,用C语言,可理解为:
    函数date,其返回值是类型为:NSDate的指针变量。
    再把这个指针变量,赋值给另一个指针变量:*now。
    对么?
    2.double  seconds=[now  timeIntervalSince1970];
    如果,上面理解对。
    now是个指针变量,还是非指针变量?
      

  3.   

    接上楼3.double  seconds=[now  timeIntervalSince1970];
    如果,now是个指针变量。
    怎么可以赋值给一个非指针变量: seconds ?
      

  4.   

    now可以说是个指针
    你先不管[nsdate date]这个写法
    在oc中通常创建一个对象的写法是这样的
    SomeClass *class = [[SameClass alloc] init]
    其中有两步,第一部是alloc,这一步的作用就是在内存中分配空间,后面的init是初始化这个内存中的数据
    然后SomeClass  *是个整体,*表示一个指针指向这个新开辟的内存空间,前面的SomeClass说明这个指针指向的内存是SomeClass类型的数据再简化一点看
    int a=10;
    这和前面的alloc类似,直接开辟了内存,存储数据10
    int *p = &a
    这里的p就是指向a的指针,其类型就是int *