UIProgressView
ユーティリティクラスのメソッドからのデータで更新しようとしています。さて、更新のためUIProgressView
に、ビューコントローラクラスでそのメソッドを保持しているので、すべてが正常に機能します。グローバル変数を使用してそのメソッドのループに到達できるため、進行状況を更新できます。しかし、このメソッドをユーティリティクラスに移動したい場合は、通知を継続するために何をする必要がありますかUIProgressView
。ありがとう。
1 に答える
1
私が提案するのは、ユーティリティクラスをシングルトンになるように再設計することです
ユーティリティクラスのコードの例を次に示します。
UtilityClass.hファイル:
@interface UtilityClass : NSObject
+ (UtilityClass *)sharedInstance;
- (CGFloat)awesomeMehod;
@end
UtilityClass.m
@implementation UtilityClass
+ (id)sharedInstance
{
static UtilityClass *_instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[UtilityClass alloc] init];
});
return _instance;
}
- (id)init
{
self = [super init];
if (!self) return nil;
// Regular initialization, however keep in mind that it will be executed just once
return self;
}
- (CGFloat)awesomeMethod
{
return 42.0f
}
@end
これで、ViewControllerから電話をかけます
CGFloat progress = [[UtilityClass sharedInstance] awesomeMethod];
[self.progressView setProgress:progress];
いくつかのことに注意してください。
これは可能なアプローチの1つであり、いつか役立つ可能性のあるさまざまなデザインパターンについて読みに行きます 。
ビューコントローラとそれらが相互作用する方法に関する知識を更新することはおそらく良い考えです
クラスを適切なシングルトンにするには、、、、、などのメソッドもオーバーライドする必要があります(
alloc
ARC を使用する場合、オーバーライドするメソッドのリストは異なります) 。これは、 呼び出しを処理しますが、その例です。今のところ、クラスメソッドを呼び出すことによってのみクラスを「インスタンス化」する限り、問題はありません。init
initWithZone
dealloc
release
dispatch_once
@synchronize()
sharedInstance
于 2012-08-15T07:31:33.810 に答える