次のようなモデル/サービス クラスを使用するクラスまたは ViewController があります。
@interface MainViewController : UIViewController <TweetServiceDelegate> {
NSArray *_tweets;
}
@property (nonatomic, strong) TweetService *tweetService;
@end
@implementation MainViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.twitterService queryForLatestTweets];
}
// delegate methods the tweetservice calls back after async getting data
- (void)querySucceededWithTweets:(NSArray *)tweets {
_tweets = [tweets copy];
}
@end
私が尋ねる理由は、Service が ViewController であるデリゲートへの弱い参照を持っているためです。
したがって、ARCでは、相互に使用する2つのものが両方に強い参照を持つことを望まないことを知っています。したがって、弱いがViewControllerがNSArrayを保持している場合、Serviceは範囲外になると収集されません。サービスは範囲外になりましたが、ViewController は範囲外になりませんでした
@interface TweetService
@property (nonatomic, weak) id<TweetServiceDelegate> delegate;
@end
@implementation TweetService
- (void)queryForLatestTweets {
// do the query with AFNetworking, when succeed block fires, call the delegate
[self.delegate querySucceededWithTweets:arrayOfTweets];
}
@end