現在、API 用の Objective-C ライブラリを作成しています。データを簡単に管理するために、モデルとして機能するいくつかのクラスを作成しました。
たとえば、Account
ある特定のアカウントに関するすべてのデータを含むクラスがあります。このクラスを簡単に初期化したいのですが、次のようなことを考えました:
@interface Account : NSObject
@property (nonatomic, readonly) NSUInteger accountID;
@property (nonatomic, readonly) NSString *username;
// Other properties...
+ (instancetype)accountWithUsername:(NSString *)username success:(void (^)(Account *))success failure:(void (^)(NSError *))failure;
- (instancetype)initWithUsername:(NSString *)username success:(void (^)(Account *))success failure:(void (^)(NSError *))failure;
@end
@implementation Account
+ (instancetype)accountWithUsername:(NSString *)username success:(void (^)(Account *))success failure:(void (^)(NSError *))failure
{
return [[JPImgurAccount alloc] initWithUsername:username success:success failure:failure];
}
- (instancetype)initWithUsername:(NSString *)username success:(void (^)(Account *))success failure:(void (^)(NSError *))failure
{
self = [super init];
// Launch asynchronous requests, the callback will be called when it's finished
return self; // Returning an empty object until the asynchronous request is finished
}
@end
ただし、メソッドを介して空のオブジェクトを返すことinit
は少し気になり、本当に良いアイデアかどうかを自問しますが、なぜ危険なのかわかりません。
だから私はあなたに尋ねています:私はこの構造を使うことができますか?そうでない場合、なぜですか?init
メソッドに結合された単一のメソッドを使用して、古典的な方法で行く必要がありloadWithUsername:(NSString *)username success:(void (^)(JPImgurAccount *))success failure:(void (^)(NSError *))failure
ますか?
ありがとう。