入了Kindle DXG,再也没有理由偷懒了,每次说开始学习XXX,都坚持不了几天。刚学Objective-c,有些理解有问题,可能存在错误,文章只是做笔记,并不是教程。该例来自于《Objective-2.0程序设计》。
#import
//导入头文件
@interface Fraction: NSObject
{
int numerator,denominator;
}
-(void) print;//打印分数
-(void) setNumerator: (int) n;//设置分子
-(void) setDenominator: (int) d;//设置分母
-(void) calculate;//计算成小数并输出
-(int) numerator; //把被除数封装
-(int)denominator;//把除数封装
@end
/*
声明接口(原书称类,初学,暂时不知是否跟JAVA一样分类和接口),分两部分,上面的是第一部分,声音所有变量及方法
以@interface开始,@end结束
Fraction为接口名,冒号表示继承,NSObject是父类
花括号内声明所有的变量,外面声明方法
-(返回值类型) 方法名:(参数类型)参数名; [参数列表]
开头的负号表示该方法为实例方法(只能由实例调用)
正号表示该方法为类方法(静态方法?)
*/
@implementation Fraction
-(void) print
{
NSLog(@"%d/%d=",numerator,denominator);
}
-(void) setNumerator:(int)n
{
numerator=n;
}
-(void) setDenominator:(int)d
{
denominator=d;
}
-(void) calculate
{
float result=(float)numerator/denominator;
//除法,先转float以保证精度
NSLog(@"%f",result);
}
-(int) numerator
{
return numerator;
}
-(int) denominator
{
return denominator;
}
@end
/*
第二部分写方法的具体实现,从这里看,感觉没有了类和接口的概念,因为自己实现了所有的方法
*/
int main (int argc, const char * argv[])
{
@autoreleasepool {
//自动生成的,暂时不管,好象是自动释放内存池,类似于GC
Fraction *myFraction;
//定义一个对象,* 表示指针
myFraction=[Fraction alloc];
//使用父类的alloc方法请求系统分配内存空间
myFraction=[myFraction init];
//使用父类的init方法初始化
//两行可以合并为 myFraction=[[Fraction alloc] init]; 或myFraction=[Fraction new];
[myFraction setNumerator:1];
//使用setNumerator方法设置分子
[myFraction setDenominator:3];
//使用setDenominator方法设置分母
NSLog(@"The value of myFraction is:");
[myFraction print];
//调用print函数
[myFraction calculate];
//调用calculate函数
printf("被除数 %d\n",[myFraction denominator]);
//也可以用printf函数,但不会输出时间之类的其他东西
}
return 0;
}
书中程序还在程序结束调用了release方法,但在新版的xcode中报错,这是因为4.2以后的xcode加入了Automatic Reference Counting特性,不再需要手动释放内存。