首页 > 代码库 > Objective-C之成魔之路【3-类、对象和方法】
Objective-C之成魔之路【3-类、对象和方法】
重开发者的劳动成果,请勿转载
面向对象程序设计的一些关键概念,主要关注Objective-C定义类相关的语法。
OC面向对象方面的概念和其它语言差不多。相比其他语言更接近C++。
对象就是一个物件。面向对象的程序设计可以看成一个物件和你想对它做的事情。
对象(名词)----实现(动词),先定义类(Class),再定义方法(Method)。
C语言是典型的面向过程性语言。
在C语言中,通常是先考虑要实现什么,然后才关注对象,这几乎总是与面向对象的思考过程相反。
实现(动词)----对象(名词),先定义函数(Function),再定义模块(Module)。
类的独特存在就是一个实例,对实例执行的操作称为方法。
在某些情况下,方法可以应用于类的实例或类本身。
对象使用方法可以影响对象的状态。
关键概念:对象是类的独特表示,每个对象都包含一些通常对该对象来说是私有的信息(数据)。方法提供访问和改变这些数据的手段。
Objective-C采用特定的语法对类和实例应用方法:
[ ClassOrInstance method];
请求一个类或实例来执行某个操作时,就是向它发送一条消息,消息的接收者称为Receiver。所以,可以用另外一种方式描述:
[ receiver message];
Objective-C的Method操作执行,一种理解是发送消息,另外一种是方法调用。
前一种更贴近OC的思想。
程序在逻辑上分为下面3个部分:
@interface
@implementation
program
@interface部分用于描述类和类的方法;
@implementation部分用于描述数据(类对象的实例变量存储的数据),并实现在接口中声明方法的实际代码;
program部分的程序代码实现了程序的预期目的。
@interface部分一般格式如下:
@interface NewClassName: ParentClassName
propertyAndMethodDeclarations;
@end
按照约定,类名以大写字母开头。
实例变量、对象以及方法的名称,通常以小写字母开头。
确定名称时,要遵循找到能反映变量或对象使用意图的名称。
程序具有更强的自解释性(Self-explanatory)
制定名称的规则相当简单:名称必须以字母或下划线(_)开头,之后可以使任何大小写字母、下划线或者数字的组合。
另外像$空格等都是非法,记住不能数字开头、不能使用保留字。
再次强调,Objective-C是大小写敏感的。sum、Sum、SUM均表示不同的变量。
类或实例方法,开头为负号(-)表示实例方法,正号(+)表示类方法。
返回类型放在开头的负号或正号之后的圆括号中。
有参数时,在方法名后加冒号(:),再加上参数类型和参数名。
具体的如下例所示:
-(int) currentAge;
-(void) print;
-(void) setNumber: (int) n;
方法类型 (返回类型) 方法名称 方法有参数 参数类型 参数名称
@implementation部分的一般格式如下:
@inplementation NewClassName
{
memberDeclarations;
}
methodDefinitions;
@end
需要注意的是:使用@synthesize指令能让编译器自动为你生成一些方法。
alloc是allocate的缩写。如果向某个类发送alloc消息,便获得该类的新实例。
这个alloc方法继承自父类。alloc方法保证对象的所有实例都变成初始状态。
当然想要适当的方法时,必须重新初始化,调用init方法。
经常地情况是把alloc和init合在一起,或者直接使用new方法。
例如:
Fraction *myFraction; myFraction = [Fraction alloc];//类方法 myFraction = [myFraction init];//实例方法 Fraction *myFraction = [[Fraction alloc] init];//二合一 Fraction *myFraction = [Fraction new];//类方法,new包含alloc和init
记住,方法执行的上下文环境就是接收到消息的对象。
取值方法(get)和赋值方法统(set)称为访问方法(accessor)。
这就是数据封装的原则,通过使用方法来访问对“外界”隐藏的数据。
使用一个类的程序结束本章:
// // main.m // 3_2_class_object_method // // Created by haomengzhu on 14-11-01. // Copyright (c) 2014年 haomengzhu. All rights reserved. // #import <Foundation/Foundation.h> //-------- @interface section ---------- @interface Fraction: NSObject -(void) print; -(void) setNumerator: (int) n; -(void) setDenominator: (int) d; @end //-------- @implementation section ---------- @implementation Fraction { int numerator; int denominator; } -(void) print { NSLog(@"%i/%i", numerator, denominator); } -(void) setNumerator:(int)n { numerator = n; } -(void) setDenominator:(int)d { denominator = d; } @end //-------- program section ---------- int main(int argc, const char * argv[]) { @autoreleasepool { Fraction *myFraction; // new object myFraction = [Fraction alloc]; myFraction = [myFraction init]; // set [myFraction setNumerator: 1]; [myFraction setDenominator: 3]; // print all NSLog(@"Hello, World!"); [myFraction print]; } return 0; }
Objective-C之成魔之路【3-类、对象和方法】