我正在关注这个初学者教程http://www.raywenderlich.com/1797/ios-tutorial-how-to-create-a-simple-iphone-app-part-1,我有一个关于这个课程的问题及其在这里实施:
RWTScaryBugData.h
@interface RWTScaryBugData : NSObject
@property (strong) NSString *title;
@property (assign) float rating;
- (id)initWithTitle:(NSString *)title rating:(float)rating;
@end
Run Code Online (Sandbox Code Playgroud)
RWTScaryBugData.m
@implementation RWTScaryBugData
@synthesize title = _title;
@synthesize rating = _rating;
- (id)initWithTitle:(NSString *)title rating:(float)rating {
if ((self = [super init])) {
self.title = title;
self.rating = rating;
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
我正在看这个初始化器:
- (id)initWithTitle:(NSString *)title rating:(float)rating {
}
Run Code Online (Sandbox Code Playgroud)
我可以这样编写它,而不是像那样写它:
- (RWTScaryBugData *)initWithTitle:(NSString *)title rating:(float)rating {
}
Run Code Online (Sandbox Code Playgroud)
有人能告诉我区别吗?或者,如果它真的不重要?
Max*_*iel 12
返回id而不是类是Objective-C中的一个约定,用于允许子类覆盖该初始化程序并返回它们的类型.例如,对于一个长时间的array类方法的NSArray返回id,这样NSMutableArray可以覆盖这个方法,并返回一个可变的数组,所以这两个是可能的:
NSArray *array = [NSArray array];
NSMutableArray *mutableArray = [NSMutableArray array]; // Wouldn't be possible if the method returned (NSArray *)
Run Code Online (Sandbox Code Playgroud)
这个问题是你也可以说:
NSString *string = [NSArray array]; // bad
Run Code Online (Sandbox Code Playgroud)
这将是一次挑战.Apple引入instancetype了一种新的返回类型,它返回instancetype使用声明的类.今天,该array方法返回instancetype以便前面的2个例子进行类型检查,但不好的例子不会进行类型检查.
更多细节,请参阅有关该主题的NSHipster文章.
| 归档时间: |
|
| 查看次数: |
2427 次 |
| 最近记录: |