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一栏添加文件路径。