gpt4 book ai didi

objective-c - 缺少对方法的基本理解

转载 作者:搜寻专家 更新时间:2023-10-30 20:09:17 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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”为前缀

关于objective-c - 缺少对方法的基本理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19937804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com