|
今天看官方文档时看到一段话,理解不了,求指教。 尤其是because后面那段话,看不懂。 |
|
![]() |
我个人觉得不要太在意这个,因为这更像是之前MRC的习惯(MRC下,dealloc里调用[self.name release]必然造成内存泄漏),ARC下哪怕是苹果自己的代码都没有遵守,给你一些示例:
AFNetworking的示例代码:
- (id)initWithCoder:(NSCoder *)decoder {
self = [super initWithCoder:decoder];
if (!self) {
return nil;
}
self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))];
return self;
}
- (instancetype)initWithBaseURL:(NSURL *)url
sessionConfiguration:(NSURLSessionConfiguration *)configuration
{
self = [super initWithSessionConfiguration:configuration];
if (!self) {
return nil;
}
// Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected
if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) {
url = [url URLByAppendingPathComponent:@""];
}
self.baseURL = url;
self.requestSerializer = [AFHTTPRequestSerializer serializer];
self.responseSerializer = [AFJSONResponseSerializer serializer];
return self;
}
FLEX示例代码:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.slider = [[UISlider alloc] init];
self.slider.backgroundColor = self.backgroundColor;
[self.slider addTarget:self action:@selector(sliderChanged:) forControlEvents:UIControlEventValueChanged];
[self addSubview:self.slider];
self.valueLabel = [[UILabel alloc] init];
self.valueLabel.backgroundColor = self.backgroundColor;
self.valueLabel.font = [FLEXUtility defaultFontOfSize:14.0];
self.valueLabel.textAlignment = NSTextAlignmentRight;
[self addSubview:self.valueLabel];
[self updateValueLabel];
}
return self;
}
苹果官方Demo:
- (id)initWithSourceType:(AssetBrowserSourceType)sourceType modalPresentation:(BOOL)modalPresentation;
{
if ((self = [super initWithStyle:UITableViewStylePlain]))
{
self.assetSources = sources;
if ([sources count] == 1) {
singleSourceTypeMode = YES;
self.title = [[self.assetSources objectAtIndex:0] name];
}
else {
self.title = NSLocalizedString(@"Media", nil);
}
}
return self;
}
所以我觉得不用太在意这个,这个建议目前看起来似乎有一些不合时宜 |
![]() |
谢谢版主哈,目前初学,不想被乱七八糟的中文书籍误导,留下难以磨灭的”印象”,所以直接看了官方文档,收获不少,但是也有很多疑问。。。
我个人对这个问题的理解是,自己写的setter方法中可能会有其他行为,而不是单纯的赋值,比如可能使用到其他成员变量的值。而在init中,有些成员变量都没初始化成有意义的值,然后使用setter的话,setter使用的也是没有意义的值,所以不是很好。这样理解你觉得make sense吗? |
![]() 40分 |
事实上我也经常在init里用setter,比如初始化一个变量的时候,给另一个变量也做一些操作,这样的行为,其实是与业务逻辑挂钩的。关键是Apple自己提供的许多Demo里也有这样的行为,我到是希望能看到几个“不接受”这个建议导致的问题。 |

