問題
いくつかのプロパティを遅延ロードするレガシーコード(iOS 5より前)を移行していreadonly
ます。このコードをARCを使用してiOS5以降に更新したいと思います。しかし、私はARCについて学んでいます。
.h
@property (nonatomic, retain, readonly) NSDateFormatter *timeFormatter;
.m
- (NSDateFormatter *)timeFormatter {
if (timeFormatter == nil) {
timeFormatter = [[NSDateFormatter alloc] init];
[timeFormatter setDateFormat:@"h:mm a"];
}
return timeFormatter;
}
私が試したこと
コードを更新しようとしましたが、読み取り専用プロパティへの割り当てを受け取りました。
.h
@property (nonatomic, strong, readonly) NSDateFormatter *timeFormatter;
.m
- (NSDateFormatter *)timeFormatter {
if (self.timeFormatter == nil) {
self.timeFormatter = [[NSDateFormatter alloc] init];
[self.timeFormatter setDateFormat:@"h:mm a"];
}
return self.timeFormatter;
}
私もレビューしました:
- iOSARCは強力で割り当てられています
- iOSでのスレッドセーフな遅延初期化
- http://www.cocoanetics.com/2012/02/threadsafe-lazy-property-initialization/
質問
readonly
ARCを使用してiOS5以降でプロパティを遅延ロードする正しい方法は何ですか?.hと.mの両方のコードサンプルをいただければ幸いです。