Mọi lớp học có nghĩa vụ phải có designated initialiser. Nếu UIImageView
tuân theo quy ước này (nó nên, nhưng tôi chưa thử nghiệm nó) thì bạn sẽ thấy rằng việc gọi -init
sẽ kết thúc bằng cách gọi số -initWithFrame:
.
Nếu bạn muốn đảm bảo rằng phương pháp init của bạn được chạy, tất cả các bạn phải làm là ghi đè lên initialiser định của lớp cha mẹ, hoặc là như thế này:
-(id) initWithFrame:(CGRect)frame;
{
if((self = [super initWithFrame:frame])){
//do initialisation here
}
return self;
}
Hoặc như thế này:
//always override superclass's designated initialiser
-(id) initWithFrame:(CGRect)frame;
{
return [self initWithSomethingElse];
}
-(id) initWithSomethingElse;
{
//always call superclass's designated initializer
if((self = [super initWithFrame:CGRectZero])){
//do initialisation here
}
return self;
}
Nguồn
2011-12-21 09:38:19
+1 nhưng hãy bắt đầu các phương thức init của bạn bằng 'init' để giữ các quy ước đặt tên. – JeremyP
Rất tiếc, tôi quá nhanh để rút ra "foo" hoặc "bar" hoặc "myFunction" khi tôi tạo tên để trình diễn. –