Objective-C是一种面向对象编程的语言,OC跟C++一样,都是对C的扩展,OC只允许单根继承(根是NSObject),C++则允许多根继承。
面向对象编程(Object-Oriented Programming)简称OOP,OOP的思想很重要。
Objective-C的名称就是这样而来。
Objective-C 中有几种数据类型和 C 不太一样。特此记录。
-
- id 是一个指针类型,可以指向任何类型的对象
-
- BOOL 和 char 是一样的,但是做为布尔值使用。
YES 表示1
NO 表示 0
-
- IBOutlet 是个没有任何意义的宏,可以忽略。当 Interface Builder 从.h 文件中读取类
定义时,这个宏会对其做出一个提示。
- IBAction 和 void 是一样的,同样仅用作对 Interface Builder 的提示。
- nil 和 NULL 是一样的,我们使用 nil 而不用 NULL 是因为我们用来表示对象的指针为空。(以下摘自网络)
Objective-C是什么?
你可以把它认为是语法稍稍有点不一样的c语言。虽然第一眼望上去你可能会认为它是火星语,和你所认知的任何一种语言都不一样。
OC
C语言是一门面向过程的语言,OC是在C语言的基础上,增加了一层最小的面向对象语法,为什么说是最小的面向对象语法呢?因为OC把一些比较复杂的面向对象语法都去掉了,剩下的都是面向对象的精华,因此OC是一门面向对象的语言,而且会比C++简单很多。因为OC是基于C语言的,所以完全兼容C语言,也就是说我们在开发iOS程序过程中,可以在OC代码中混入C语言代码,甚至是C++代码。
先简单列出一点差别:
问题一:我在程序中看到大量的减号、中括号和NS****这种东西,他们是什么玩意儿?
1 减号(或者加号)
减号表示一个函数、或者方法、或者消息的开始,怎么说都行。
比如c#中,一个方法的写法可能是:
private void hello(bool ishello)
{
//OOXX
}
用Objective-C写出来就是
-(void) hello:(BOOL)ishello
{
//OOXX
}
挺好懂的吧?
不过在Objective-C里面没有public和private的概念,你可以认为全是public。
而用加号的意思就是其他函数可以直接调用这个类中的这个函数,而不用创建这个类的实例。
学过java的人可以这样理解:(减号) - 实例方法 +(动态方法)
2 中括号
中括号可以认为是如何调用你刚才写的这个方法,通常在Objective-C里说“消息”。
比如C#里你可以这么写:
this.hello(true);
在Objective-C里,就要写成:
[self hello:YES];
3 NS****
老乔当年被人挤兑出苹果,自立门户的时候做了个公司叫做NextStep,里面这一整套开发包很是让一些科学家们喜欢,而现在Mac OS用的就是NextStep这一套函数库。
在Java中,为了防止两个类名相同的类冲突,你可以将这2个类放在不同的包里面。OC中并没有"包"的概念,也就是没有命名空间机制,取而代之的是开发人员给类名加上前缀,使用前缀可以有效的防止类名冲突。比如NSString(OC中的字符串类)、NSArray(OC的数组类),它们的前缀都是NS
这些开发NextStep的人们比较自恋地把函数库里面所有的类都用NextStep的缩写打头命名,也就是NS****了。
而现在则是Cocoa.
语法要点:
