在objective-c中的内存分配

时间:2015-02-03 21:33:14

标签: objective-c

我正在尝试关注this教程,因为我是目标C的新手。我正在尝试理解这个初始化代码

#import "RWTScaryBugDoc.h"
#import "RWTScaryBugData.h"
@implementation RWTScaryBugDoc
@synthesize data = _data;
@synthesize thumbImage = _thumbImage;
@synthesize fullImage = _fullImage;

- (id)initWithTitle:(NSString*)title rating:(float)rating thumbImage:(UIImage *)thumbImage fullImage:(UIImage *)fullImage {  
  if ((self = [super init])) {
  self.data = [[RWTScaryBugData alloc] initWithTitle:title rating:rating];
  self.thumbImage = thumbImage;
  self.fullImage = fullImage;
 }
return self;
}

@end

这里的类RWTScaryBugDoc包含三个属性:data,thumbImage和fullImage。所有都是指针对象。 但是在初始化代码中,内存只分配给RWTScaryBugData而不分配给thumbImage和fullImage。 这是为什么 ? 调用者如何知道为thumbImage和fullImage分配内存?

3 个答案:

答案 0 :(得分:1)

没有直接分配RWTScaryBugData;必须使用titlerating参数制作一个。但是有一些参数可以直接分配给thumbImage& fullImage。

调用者必须为所有传递的参数分配空间;如果她没有,她就无法通过。

答案 1 :(得分:1)

构造函数有4个参数。标题,评级,拇指和完整。前两个用于数据属性。用户应该假设他们需要传入已经分配/初始化的所有参数。

想想看,如果你有第二个构造函数,它接受了data,thumb和full,你需要自己分配/ init数据然后传入。

答案 2 :(得分:0)

您发布的代码只是将现有的UIImage对象分配给属性,因此不需要分配。在调用初始化程序之前,可能会分配图像。

另外,在现代Objective-C中,FYI,显式@synthesize语句是不必要的,除非你覆盖了访问者。