1 程序整体语法结构 [Objective-C基础教程]
程序的头文件和源文件的扩展名分别为 .h 和 .m 。注释语法和 C 一样。 Object_C 中的 nil 相当于 NULL 。
Object_C 中的 YES 和 NO 相当于 true 和 false 。
这里再讲解一下 YES 和 NO :
Object-c 提供了 BOOL 类型,但这个 BOOL 类型和 C++ 里的并不一样:在 C++ 里一切非 0 值的东西 都
为 true ,而为 0 值的为 false 。但是 Object-c 里 1 为 true 并被宏定义为 YES , 0 为 false 并被宏定义为 NO 。
所以,如果读者写下面的代码,则肯定是错误的:
BOOL areIntsDifferent_faulty(int thing1,int thing2)
{
return (thing1-thing2);
}
if(areIntsDifferent_faulty(23,5) == YES)
{
}
因为 areIntsDifferent_faulty 方法返回的是两个整数的差 , 如果这个差不为 1 ,那么永远不会为 YES 。
先了解程序的结构 :
#import <Foundation/Foundation.h>
int main(int argc,const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init ];
NSLog(@"Programming is fun!");
[pool drain];
return 0;
}
#import <Foundation/Foundation.h>
相当于 #include 导入头文件 也有两种查找方式 < … > 和 " … " 。导入该头文件是因为在程序结尾处用
到的其他类和函数的有关信息
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init ];
这条语句为自动释放池在内存中保留了空间,就是在释放内存池的时候同时释放调其中的所有对象,
若对象要加入该池,只要发送一条 autorelease 消息。
NSLog(@"Programming is fun!");
将显示常量字符串,类似于 printf 函数, 并且它会自动在文本后面添加 '\n' 。 当然其中也可以使用转义
字符。例如还有
NSLog(@"The sum of 50 and 25 is %i",sum);
[pool drain]; / / 释放内存池
[classOrInstance method] ;
左方括号是类的名称或者该类实例的名称,空格后面是方法(即消息)
获得对象 :( 从 Car 类获得其对象 )
youCar = [Car new];
定义一个新类分为 2 部分:
@interface 部分
描述类、类的数据成分以及类的方法
@implementation 部分
实现这些方法的实际代码
@interface 部分的一般格式:
@interface NewClassName : ParentClassName
{
memberDeclarations;
}
methoddeclarations;
@end
命名规则: 以字母或下划线开头,之后可以是任何字母,下划线或者 0~9 数字组合,
约定: 类名以大写字母开头,实例变量、对象以及方法的名称以小写字母开始。
每次创建新对象时,将同时创建一组新的实例变量且唯一。注意:在对象类型的右边都有一个 * 号 ,
所有的对象变量都是指针类型。 Id 类型已经被预定义为指针类型,所以不需要加一个 * 号。
函数开头的( - )号或者( + )号表示:
( - ) 该方法是实例方法(对类的特定实例执行一些操作);
( + )是类方法(即对类本身执行某些操作的方法,例如创建类的新实例)
函数的声明示例:
- ( void ) setNumerator :( int ) n
第一个表示方法类型,返回类型,接着是方法名,方法接受的参数,参数类型,参数名
注: 如果不带参数则不用使用 “ : ” 号
如果没有指定任何返回类型,那么默认是 id 类型,所有的输入参数默认也是 id 类型( id 类型可用来引 用
任何类型的对象)。
或许到现在你会认为将对象赋给 id 类型变量会有问题。
注: 无论在哪里,对象总是携带它的 isa 的保护成员(可以用来确定对象所属的类),所以
即使将它存储在 id 类型的通用对象变量中,也总是可以确定它的类。
具有多个参数的方法:
-/+ (return type) function_name : (parameter type) parameter1 otherParameter : (parameter_type) parameter2;
如果只有一个参数,在 : 后面声明参数的类型和名称;如果有多个参数的话,每个参数前面都要有 一
个 : , 然后接着是参数类型和参数名称。可是大家可能还是觉得很奇怪。比如上面这个例子中,
otherParameter 这个是什么意思,在 objective c 中,对于有多个参数的函数,可以理解为将函数的名称拆
成了几个部分,每个部分都是对紧接着的参数的一个解释。
如在 C++ 中:
void initializeRectangle(int x1, int y1, int x2, int y2) ;
但并不知道这些参数都是什么意思;但在 objective c 中,可以这样声明:
void initializeRectange: (int)x1 LeftUpY: (int)y1 RightBottomX: (int)x2
RightBottomY:(int)y2;
@implementation 部分的一般格式:
@implementation NewClassName
methodDefinitions;
@end
//NewClassName 表示的名称与 @interface 部分的类名相同。