ojective-C学习笔记(3)关于面向对象编程

面向对象编程(Object-Oriented Programming)的首字符缩写为OOP。
在学习OOP之前,先来看看OOP的一个重要概念:间接(indirection)。

间接在编程中体现在通过指针间接获取某个值,而不是直接取值。比如我们打电话是通过通讯录间接选择要联系的人,而不是直接在手机中输入对方的手机号码。

变量与间接

先来看下面的代码:

int main(int argc, const char * argv[]) {
    
    NSLog(@"The sum of numbers from 1 to 10:");
    int sum = 0;
    for (int i = 1; i <= 10; i++){
        sum += i;
    }
    NSLog(@"%d",sum);

    return 0;
}

求数字1到10的和,如果我们要求1到100的和,可以将代码修改如下:

int main(int argc, const char * argv[]) {
    
    NSLog(@"The sum of numbers from 1 to 100:");
    int sum = 0;
    for (int i = 1; i <= 100; i++){
        sum += i;
    }
    NSLog(@"%d",sum);

    return 0;
}

我要修改两个地方,来看下面的代码:

int main(int argc, const char * argv[]) {
    
    int count = 100;
    NSLog(@"The sum of numbers from 1 to %d:", count);
    int sum = 0;
    for (int i = 1; i <= count; i++){
        sum += i;
    }
    NSLog(@"%d",sum);

    return 0;
}

通过引入变量值修改了一个地方,是不是简单了一些。修改的越少,出错的概率也就越低。

使用文件名的间接

来看下面的代码:

int main(int argc, const char * argv[]) {
    
    const char *words[4] = {
        "cnblogs","baidu","github","qq"
    };
    int count = 4;
    for(int i = 0; i < count; i++){
        NSLog(@"%s is %lu characters long.", words[i], strlen(words[i]));
    }
}

输出结果如下:

2018-04-21 13:24:09.136526+0800 HelloWorld[3876:599422] cnblogs is 7 characters long.
2018-04-21 13:24:09.136781+0800 HelloWorld[3876:599422] baidu is 5 characters long.
2018-04-21 13:24:09.136792+0800 HelloWorld[3876:599422] github is 6 characters long.
2018-04-21 13:24:09.136800+0800 HelloWorld[3876:599422] qq is 2 characters long.

这段代码计算了每个单词的长度。

我们可以使用外部文件来存储单词,我把文件放在了桌面位置,把上面代码修改如下:

int main(int argc, const char * argv[]) {
    FILE *wordsFile = fopen("/Users/ccyag/Desktop/words.txt", "r");
    char word[100];
    while (fgets(word, 100, wordsFile)) {
        word[strlen(word) - 1] = '\0';
        NSLog(@"%s is %lu characters long.", word, strlen(word));
    }
    fclose(wordsFile);
    return 0;
}

得到同样的输出结果。

通过使用文件名的间接,将单词从代码中隔离出来,方便操作和管理。

我们可以将文件位置以参数的形式传递给main函数。

将代码稍做修改:

int main(int argc, const char * argv[]) {
    if (argc == 1){
        NSLog(@"Please provide a file name.");
        return 1;
    }
    
    FILE *wordsFile = fopen(argv[1], "r");
    char word[100];
    while (fgets(word, 100, wordsFile)) {
        word[strlen(word) - 1] = '\0';
        NSLog(@"%s is %lu characters long.", word, strlen(word));
    }
    fclose(wordsFile);
    return 0;
}

在Xcode中设置启动参数:

在Xcode中点击Product->Edit Scheme 在弹出的面板中选择Arguments选项,在Arguments Passed On Launch一栏添加文件路径。

posted @ 2018-04-21 13:06  陈道长  阅读(132)  评论(0编辑  收藏  举报