缺乏对方法的基本理解

时间:2013-11-12 19:08:31

标签: objective-c

我是一名OLD程序语言程序员,正在努力学习Obj C.并且在拔出所有头发后意识到我缺少一个基本的理解

当我分配一个对象的实例(myObj)时,通过方法给它一些数据,并调用一个方法/向该实例发送一条消息,实现例程是否可以假设该实例中的所有数据都可用?

即[myObj doSomeStuff] doSomeStuff的实现是否可以假设myObj的所有实例数据都可用,或者我是否需要作为myObj的所有部分和部分的参数发送?

2 个答案:

答案 0 :(得分:3)

关于Luis和rmaddy说的话。其中一些最好用一个例子来说明。让我们考虑一个Circle类对象:

这是.h文件:

//  Circle.h

#import <Foundation/Foundation.h>

@interface Circle : NSObject
{
    double radius;
    double pi;
}

@property double radius, pi;

-(double) area;
-(double) diameter;
-(double) circumference;

@end

然后是实现文件(注意我已经定义了Luis指出的实例方法):

//  Circle.m

#import "Circle.h"

@implementation Circle

@synthesize radius, pi;

// Initialize with default radius:
- (instancetype)init {
    self = [super init];
    if (self) {
        pi = 3.14159;
        NSLog(@"Circle created.");
    }
    return self;
}

-(double) area {
    return pi*radius*radius;
}

-(double) diameter {
    return 2*radius;
}

-(double) circumference {
    return 2*pi*radius;
}

@end

现在在main中创建一个圆形对象并发送消息以返回几个相关的数量:

//  main.m

#import <Foundation/Foundation.h>
#import "Circle.h"

int main(int argc, const char * argv[])
{
    @autoreleasepool {

        Circle *aCircle = [[Circle alloc] init];

        [aCircle setRadius:2];

        NSLog(@"Area = %f",[aCircle area]);
        NSLog(@"Circumference = %f",[aCircle circumference]);
        NSLog(@"Diameter = %f",[aCircle diameter]);
        NSLog(@"Check pi = %f",[aCircle pi]);

    }
    return 0;
}

您可以从此示例中看到, pi 的值在创建对象时设置,然后作为对象的一部分存储,可用于其他计算。

注意:您不希望在实践中以这种方式定义 pi ,这只是一个简单的例子来说明这一点。

另请注意,我可以在创建对象后设置其他内部值,然后从该点开始提供此数据,具体取决于帖子中指出的资格。 < / p>

这是否更有意义?你应该运行这个代码并试验这个想法,直到你觉得它更舒服。

编辑:在Andrew Madsen的建议中,更新了面积,直径和周长的存取方法;这些不应该以'get'为前缀

答案 1 :(得分:0)

是,如果方法是实例方法(那些以“ - ”开头而不是“+”的方法)。