想做IOS开发,培训之前自己先自学一段时间,于是开一篇新的笔记来记录学习的点滴吧。
Objective-c是以c语言为基础的扩展集,当然首先要得熟悉c语言再去学习Objective-c,我是根据《Objective-c基础教程》来自学的。鄙人初学,如有观点不同或者错误之处请指正亦可贻笑大方。
构建Objective-c程序
我们需要先下载Xcode来作为基本的编辑器,下载安装完成后我们来新建一个Xcode Project,之后我们选择
要在Type中选择Foundation,然后选择Next,按步骤保存项目即可。
main.m就是包含了程序的源代码。
HELLO WORLD 程序:
在C语言中我们可以这样来输出Hello World这句话
#include <stdio.h> int main () { printf ("Hello World !"); return 0; }
现在可以在main中输入以下
#import <Foundation/Foundation.h> int main (int argc,const char *argv[]) { NSLog (@"Hello World !"); return 0; }
点击左上角的运行后会在下面显示运行结果,如图:
代码分析:
Xcode通过 .m扩展名来表示文件使用的是Objective-c代码,应该是由object-c编译器处理。那么如果由c语言基础,不难看懂是由main()函数声明语句和return 语句结尾。这里的
#import <Foundation/Foundation.h>
语句告诉编译器查找Foundation框架中的Foundation.h头文件。
那么什么是框架呢?所谓的框架就是一种把头文件、库、图片、声音等内容聚集在一个独立单元中的集合体,Foundation属于Cocoa工具包中的内容,主要处理的是用户界面之下的那些(Layer)的特性,比如数据结构和通信机制。
我们使用的唯一一行Object-c语句的实际代码就是用了NSLog()函数
NSLog(@"Hello World !");
这行代码是向控制台输出Hello World !在C语言中常用的是printf()语句。NSLog()接受一个字符串作为其第一个参数,该字符可以包含格式说明符例如:%d,此函数会接受与其格式说明符相匹配的其他参数。当然,Objective-c是c语言的拓展集,在输出时依然可以使用printf()函数来进行输出(建议使用NSLog)。
@符号是什么东西?
@符号是Objective-c在C语言基础上添加的特性之一。@意味着引号内的字符串应该作为Cocoa的NSString元素来处理。
NSString又是什么?
NSString是Cocoa中的字符串。NSString支持:字符串长度,字符串比较以及整形或浮点值转换等等。
NS是指什么?
Cocoa在给所有的函数、常量和变量以及类型名都添加了NS前缀。这个前缀告诉我们这个函数是来自Cocoa而不是其他的工具包。
另外,例如NSArray存放数组,NSDateFormatter来设置不同的时间格式,NSThread提供多线程,NSSpeechSynthesizer能够听到语音。
布尔类型:
在c语言中,布尔类型有True和False两个值,在Objective-c中则是YES和NO两个值。
下面是一个简单的例子:
#import <Foundation/Foundation.h>
BOOL areIntsDifferent (int thing1,int thing2) { if (thing1== thing2) { return (NO); } else { return (YES); } } NSString *boolString (BOOL yesNo) { if (yesNO == NO) { return (@"NO"); } else { return (@"YES"); } } int main (int argc, const char *argv[]) { BOOL areTheyDifferent; areTheyDifferent = areIntsDifferent (5,5); NSLog(@"are %d and %d different ? %@",5,5,boolString(areTheyDifferent)); areTheyDifferent = areIntsDifferent (23,42); NSLog(@"are %d and %d different ? %@",23,42,boolString(areTheyDifferent)); return (0); }
代码分析:
首先是areIntsDifferent()函数,
BOOL areIntsDifferent (int thing1,int thing2) { if (thing1== thing2) { return (NO); } else { return (YES); } }
接受两个整形的参数,返回一个BOOL值,根据thing1和thing2来进行比较,如果相同返回NO,如果不同返回YES
第二个函数是,
NSString *boolString (BOOL yesNo) { if (yesNO == NO) { return (@"NO"); } else { return (@"YES"); } }
这个函数的主要作用是将bool值转化为显而易见的字符串。boolString()的返回值是一个指向NSString的指针,这意味着函数会返回一个Cocoa字符串。
main()函数
areTheyDifferent变量保存了areIntsDifferent()的返回的YES或者NO。
那么在NSLog里面的%@是什么意思呢?
在NSString()中返回了一个指针,在NSLog中写%@格式说明符是为了通知NSLog接受适当的参数,将其作为NSString,并且使用字符串中的字符将其发送到控制台中。
Object-c 学习笔记(一)