gpt4 book ai didi

Objective-C getter / setter

转载 作者:太空狗 更新时间:2023-10-30 03:25:02 25 4
gpt4 key购买 nike

我正在努力学习 Objective-C 教程。书中有这个例子:

@interface
{
int width;
int height;
XYPoint *origin;
}
@property int width, height;

我想,“嘿,XYPoint 对象没有 getter/setter。不过代码确实有效。”现在我可能会回答我自己的问题 :)。

我认为这是因为“原点”已经是一个指针,而在“宽度”和“高度”的幕后发生的事情是,将创建一个指向它们的指针..

我是对的,还是在胡说:) ??

我只是不明白。这是主要的:

#import "Rectangle.h"
#import "XYPoint.h"
int main (int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

Rectangle *myRect = [[Rectangle alloc] init];
XYPoint *myPoint = [[XYPoint alloc] init];

[myPoint setX: 100 andY: 200];
[myRect setWidth: 5 andHeight: 8];

myRect.origin = myPoint;

NSLog (@"Rectangle w = %i, h = %i",
myRect.width, myRect.height);

NSLog (@"Origin at (%i, %i)",
myRect.origin.x, myRect.origin.y);

NSLog (@"Area = %i, Perimeter = %i",
[myRect area], [myRect perimeter]);

[myRect release];
[myPoint release];
[pool drain];

return 0;
}

这是矩形对象:

#import "Rectangle.h"
#import "XYPoint.h"

@implementation Rectangle
@synthesize width, height;

-(void) setWidth: (int) w andHeight: (int) h
{
width = w;
height = h;
}

- (void) setOrigin: (XYPoint *) pt
{
origin = pt;
}
-(int) area
{
return width * height;
}
-(int) perimeter
{
return (width + height) * 2;
}
-(XYPoint *) origin
{
return origin;
}
@end

我不明白的是 main 中的这一行:myRect.origin = myPoint; 我没有为它制作 setter..

顺便说一句,感谢您的快速回复

最佳答案

What i dont understand is this line in main: myRect.origin = myPoint; I did not make a setter for it..

origin 创建了 getter 和 setter(统称为访问器)在Rectangle类(class)。如果您查看 Rectangle 的实现,这是 setter/getter :

-(XYPoint *) origin
{
return origin;
}

这是二传手:

- (void) setOrigin: (XYPoint *) pt
{
origin = pt;
}

从 Objective-C 2.0 调用开始:

myRect.origin = myPoint;

相当于:

[myRect setOrigin:myPoint];

使用 @property 声明 getter 和 setter (然后使用 @synthesize 实现它们)只是声明和创建访问器的一种方式,如果您有很多属性要在类接口(interface)中声明,这样做是为了方便。作为Schildmeijer说,@property int width相当于声明了两个方法:

- (int)width;
- (void)setWidth:(int)newWidth;

由于 Objective-C 方法调用的动态绑定(bind)特性,您甚至不必在接口(interface)中声明 getter 和 setter 方法,尽管这样做通常是最佳实践如果您将它们宣传为对其他类(class)公开可用。

关于Objective-C getter / setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2616581/

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