我初始化两次了吗?
我有以下类:
@interface Object2D : NSObject
{
Point2D* position;
Vector2D* vector;
FigureType figure;
CGSize size;
}
@property (assign) Point2D* position;
@property (assign) Vector2D* vector;
@property (assign) CGSize size;
...
@end
及其实现:
@implementation Object2D
@synthesize position;
@synthesize vector;
@synthesize size;
- (id)init
{
if (self = [super init])
{
position = [[Point2D alloc] init];
vector = [[Vector2D alloc] init];
size.width = kDefaultSize;
size.height = kDefaultSize;
}
return self;
}
当我创建 Object2D
的实例时,我正在这样做:
- (void) init
{
// Create a ball 2D object in the upper left corner of the screen
// heading down and right
ball = [[Object2D alloc] init];
ball.position = [[Point2D alloc] initWithX:0.0 Y:0.0];
ball.vector = [[Vector2D alloc] initWithX:5.0 Y:4.0];
}
我不确定是否正在初始化两个 Point2D
对象和两个 Vector2D 对象,因为我在 Object2D init 方法中创建了 Point2D 和 Vector2d 的实例。
@class Vector2D;
@interface Point2D : NSObject
{
CGFloat X;
CGFloat Y;
}
@interface Vector2D : NSObject
{
CGFloat angle;
CGFloat length;
Point2D* endPoint;
}
Object2D、Point2D 和 Vector2D 类没有 dealloc 方法。
有什么建议吗?
I have the following class:
@interface Object2D : NSObject
{
Point2D* position;
Vector2D* vector;
FigureType figure;
CGSize size;
}
@property (assign) Point2D* position;
@property (assign) Vector2D* vector;
@property (assign) CGSize size;
...
@end
And its implementation:
@implementation Object2D
@synthesize position;
@synthesize vector;
@synthesize size;
- (id)init
{
if (self = [super init])
{
position = [[Point2D alloc] init];
vector = [[Vector2D alloc] init];
size.width = kDefaultSize;
size.height = kDefaultSize;
}
return self;
}
When I create an instance of Object2D
, I'm doing this:
- (void) init
{
// Create a ball 2D object in the upper left corner of the screen
// heading down and right
ball = [[Object2D alloc] init];
ball.position = [[Point2D alloc] initWithX:0.0 Y:0.0];
ball.vector = [[Vector2D alloc] initWithX:5.0 Y:4.0];
}
I'm not sure if I'm initializing two Point2D
objects and two Vector2D
objects, because I make an instance of Point2D and Vector2d in Object2D init method.
@class Vector2D;
@interface Point2D : NSObject
{
CGFloat X;
CGFloat Y;
}
@interface Vector2D : NSObject
{
CGFloat angle;
CGFloat length;
Point2D* endPoint;
}
Classes Object2D, Point2D and Vector2D don't have dealloc method.
Any advice?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的,你是。另外,如果您在属性上有“保留”属性,那么像这样的行...
是您需要的内存泄漏...
或者
Yes you are. Also if you have the 'retain' attribute on the properties then lines like this...
are memory leaks you need either...
or
是的,您正在为每个类创建两个实例。而且它们确实有内置的
dealloc
方法,即使您自己没有声明它们。我会将 X 和 Y 设置为 Point2D 类的属性,这样您就可以在没有initWithX:Y:
方法的情况下更改它们,只需使用aPoint.X
更一般地说,我建议避免使用 Objective-C 对象,就像您在这里所做的那样 当您的数据可以轻松包含在结构中时,它可以使您的代码更加精简,从而避开 Objective-C 方法和内存管理的疯狂世界。
Yes, you are creating two instances of each of those classes. And they do have
dealloc
methods built in, even if you haven't declared them yourself. I would make X and Y properties of the Point2D class so that you can change them without yourinitWithX:Y:
method, just by usingaPoint.X
, etc.More generally, I would suggest avoiding using Objective-C objects as you've done here. When your data can be easily contained in a struct, it can make your code more streamlined to dodge the crazy world of Objective-C methods and memory management.