Objective-C学习笔记-消息

1.Objective-C是C的超集,所以C能使用的代码,Objective-C也能使用

2.Objective-C代码使用.m文件而不是.c/.cpp

3.Objective-C导入头文件使用#import "xxx.h"或者import <xxx.h>,#import指令会自动检查之前是否已经导入过这个文件。

  所以在头文件里没必要使用 #ifndef 或者 #program once来避免一个文件被包含多次了

4.方法和消息

Objective-C中,想执行一个类或者对象的方法,可以发送一条消息给类或者对象

在下面的代码中的[NSDate date],其中NSDate就是消息接受者,这是一个类,而date则是消息

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSDate *now=[NSDate date];
        NSLog(@"now's address is %p\n",now);
        NSLog(@"now is %@\n",now);
        double seconds=[now timeIntervalSince1970];
        NSLog(@"since 1970 is %.2f s\n",seconds);
    }
    return 0;
}

date方法执行后,会做以下事情

  • 在堆上分配一个NSDate的对象
  • 将这个对象初始化为当前的日期/时间
  • 返回这个对象的地址

 

这类似于C++里的静态成员函数

class NSDate{
    public:
    static NSDate date();
}

同样,也可以将对象作为消息的接受者,例如上面的[now timeIntervalSince1970]

 

5.发送消息时,也可以传递参数,如下面的代码

writeToFile接受四个参数,其中automcally,encoding,error不应该理解为参数名,而是方法名的一部分

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSHost *host=[NSHost currentHost];
        NSString *hostName=[host localizedName];
        NSLog(@"主机名 is %@\n",hostName);
        [hostName writeToFile:@"/tmp/cool.txt" atomically:YES
                     encoding:NSUTF8StringEncoding
                        error:NULL];
    }
    return 0;
}

 

6.每个Objective-C类都有一个默认的创建对象方法,例如

NSDate *now=[[NSDate alloc] init]

 

7.与大多数面向对象编程语言不同,Objective-C允许向一个空对象(nil)发送消息,例如

        now=nil;
        double seconds=[now timeIntervalSince1970];

 

 

posted @ 2018-09-02 17:40  土豆吞噬者  阅读(98)  评论(0编辑  收藏  举报