首页 > 代码库 > Object-c 学习笔记(一)

Object-c 学习笔记(一)

想做IOS开发,培训之前自己先自学一段时间,于是开一篇新的笔记来记录学习的点滴吧。

Objective-cc语言为基础的扩展集,当然首先要得熟悉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,并且使用字符串中的字符将其发送到控制台中。