我正在尝试关注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分配内存?
答案 0 :(得分:1)
没有直接分配RWTScaryBugData
;必须使用title
和rating
参数制作一个。但是有一些参数可以直接分配给thumbImage& fullImage。
调用者必须为所有传递的参数分配空间;如果她没有,她就无法通过。
答案 1 :(得分:1)
构造函数有4个参数。标题,评级,拇指和完整。前两个用于数据属性。用户应该假设他们需要传入已经分配/初始化的所有参数。
想想看,如果你有第二个构造函数,它接受了data,thumb和full,你需要自己分配/ init数据然后传入。
答案 2 :(得分:0)
您发布的代码只是将现有的UIImage
对象分配给属性,因此不需要分配。在调用初始化程序之前,可能会分配图像。
另外,在现代Objective-C中,FYI,显式@synthesize
语句是不必要的,除非你覆盖了访问者。