今天主要涉及Object-C中类,对象和方法的使用,这也是与C语言不同的地方,C语言被定义为过程性语言,而Object-C则像Java和C#一样是面向对象。一段代码开始新的学习,首先新建文件 main.m 主函数, NSObject+Fraction.h(如同java中定义接口)和NSObject+Fraction.m(如同java中接口实现类)
// // NSObject+Fraction.h // Demo1 // // Created by lee on 14/10/28. // Copyright (c) 2014年 lee. All rights reserved. // #import <Foundation/Foundation.h> @interface Fraction: NSObject { int numerator; int denominator; } -(void) print; -(void) setNumerator: (int) n; -(void) setDenominator: (int) d; -(void) result; @end
首先讲解@interface部分
1.Fraction类名,通常首字母大写
2.Fraction: NSObject 定义类来自何处即定义新类时必须指明它的父类
3.{...}中定义的为类成员,即实例变量
4.-(void) print;等定义处理该类的对象时将要用到的方法。
通用格式如下:
@interface <#class name#> : <#superclass#> { memberDeclarations; } methodDeclarations; @end
5.实例方法 : -(void) setNumerator: (int) n;
5.1 开头的-号表明该方法为实例方法,还有一种为+号开头,表明该方法为类方法。
5.2(void)表示该方法的返回值类型。
5.3 setNumerator 表示该方法的名称。
5.4 (int) n 表示该方法需要的参数,一个整形的参数。
5.5 每一个方法均以;结束
6.方法声明如图所示:
// // NSObject+Fraction.m // Demo1 // // Created by lee on 14/10/28. // Copyright (c) 2014年 lee. All rights reserved. // #import "NSObject+Fraction.h" @implementation Fraction: NSObject -(void) print { NSLog(@"%i/%i", numerator, denominator); } -(void) setNumerator:(int)n { numerator = n; } -(void) setDenominator:(int)d { denominator = d; } -(void) result { int quotient = numerator/denominator; NSLog(@"the quotient is %i :", quotient); } @end
@implementation部分讲解
1.@interface中声明方法,@implementation中实现。
2.@implementation中类名与@interface中类名相同。
3.@implementation中包含@interface中指定的每个方法的代码。
// // main.m // Demo1 // // Created by lee on 14/10/28. // Copyright (c) 2014年 lee. All rights reserved. // #import <Foundation/Foundation.h> #import "NSObject+Fraction.h" int main(int argc, const char * argv[]) { @autoreleasepool { int quotient, numertor, denominator; numertor = 10; denominator = 2; quotient = numertor/denominator; NSLog(@"The fraction is %i/%i \nthe quotient is %i", numertor, denominator, quotient); NSLog(@"*** break ***"); Fraction *myFraction; myFraction = [Fraction alloc]; myFraction = [myFraction init]; [myFraction setNumerator: 10]; [myFraction setDenominator: 2]; NSLog(@"The value of myFraction is :"); [myFraction print]; [myFraction result]; } return 0; }
两种方法来实现两数的相除,主要讲解下一种即 NSLog(@"*** break ***");后面的部分,有C基础的能很快的明白
1.Fraction *myFraction;用法同C语言中指针类似,表示定义Fraction类型的对象。
2.对象建立后,需要为该存储对象分配存储空间,即myFraction = [Fraction alloc];
3.alloc获得类的新实例,使得对象的所有实例变量成初始化状态。
4.然后需要对对象进行实例化操作,即myFraction = [myFraction init];
5.init用语初始化类的实例变量。
6.上述方法简写如下:Fraction *myFraction = [[Fraction alloc] init];
7.[myFraction setNumerator: 10];调用方法存储实例变量。
运行结果如下:
2014-10-29 00:52:37.980 Demo1[2834:13881] The fraction is 10/2 the quotient is 5 2014-10-29 00:52:37.981 Demo1[2834:13881] *** break *** 2014-10-29 00:52:37.981 Demo1[2834:13881] The value of myFraction is : 2014-10-29 00:52:37.981 Demo1[2834:13881] 10/2 2014-10-29 00:52:37.981 Demo1[2834:13881] the quotient is 5 : Program ended with exit code: 0
注:1.Object-C中变量名称命名规则:名称必须以字母或下划线开头,之后可以是任何字母,下划线或者数字组合。
2.Object-C保留名不能作为变量名,如:int
3.Object-C中大小写字母是有区别的。如:sum和Sum和SUM是表示不同的变量。