3

我是一个老程序语言程序员,正在努力学习 Obj C。在拔掉我所有的头发后,我意识到我缺少基本的理解

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

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

4

2 回答 2

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 中创建一个 circle 对象并发送消息以返回几个相关数量:

//  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,这只是一个简单的例子来说明这一点。

另请注意,我可以在创建对象后设置对象的其他内部值,然后从那时起也可以使用此数据,但须符合帖子中指出的条件。

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

编辑:在 Andrew Madsen 的建议下,更新了面积、直径和周长的访问器方法;这些不应以'get'为前缀

于 2013-11-12T19:23:58.840 回答
0

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

于 2013-11-12T19:15:35.900 回答