码迷,mamicode.com
首页 > 其他好文 > 详细

【OC学习-10】写一个复数相加的例子来谈谈OC的self是什么意思?

时间:2014-09-03 16:49:07      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:io   ar   文件   代码   log   on   c   ad   size   

OC的self相当于C++里面的this吧。一般都是隐形的,就是不写出来的。其实就是自己的意思,谁调用就说的是谁,那么super呢?就是父类,谁调用那么就是谁的父类。


建一个Complex的类。

(1)在Complex.h里

#import <Foundation/Foundation.h>
@interface Complex : NSObject
//只声明属性,没有写实例变量
@property(nonatomic) double real;
@property(nonatomic) double imag;
//初始化函数
-(id)initWithReal:(double)aReal Imag:(double)aImag;
//复数的加法函数
-(Complex *)add:(Complex *)aSecond;
@end

(2)在Complex.m里

#import "Complex.h"
@implementation Complex
//别忘记和@property配套的@synthesize
@synthesize real,imag;
//初始化函数
-(id)initWithReal:(double)aReal Imag:(double)aImag{
    if (self=[super init]) {
        self.real=aReal;
        self.imag=aImag;
    }
    return self;
}
//复数的加法函数,函数返回值是复数,只需要一个参数,还有一个参数实际上就是self自身
-(Complex *)add:(Complex *)aSecond{
//这里创建一个新的复数,而不是用+=操作,是因为+=会改变原先的数值,不是最好方法
    Complex * result=[[Complex alloc]init];
//这里的self就是谁调用就是谁,即某一个复数
    result.real=self.real+aSecond.real;
    result.imag=self.imag+aSecond.imag;
    return result;
}
@end

(3)在main.m里

#import <Foundation/Foundation.h>
#import "Complex.h"    //记得导入头文件
int main(int argc, const char * argv[])
{
    @autoreleasepool {
//实例化并初始化复数
        Complex * a=[[Complex alloc]initWithReal:1 Imag:3];
        Complex * b=[[Complex alloc]initWithReal:4 Imag:2];
//add是一个方法,所以用[a add]调用,并传递一个b参数
        Complex * c=[a add:b];
        NSLog(@"%g+%gi",c.real,c.imag);
    }
    return 0;
}

返回结果:

5+5i

由于新版的xcode里面ARC功能,大白话就是:程序员只管写alloc,而不需要写release和auturelease,因为它自动处理了,所以代码更简洁。当然,练习的时候可以把这个ARC功能关闭。

【OC学习-10】写一个复数相加的例子来谈谈OC的self是什么意思?

标签:io   ar   文件   代码   log   on   c   ad   size   

原文地址:http://blog.csdn.net/weisubao/article/details/39028649

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!