我是iOS 8中Objective-C的新手,所以对ARC有一点了解,我的代码在ARC下。
假设我有一个类UserModel具有NSArray和NSString等属性。我有initWithDataSource:data来为init分配一个UserModel。
在内存块中设置属性是否安全?我觉得我的代码会导致任何保留周期。我想知道我应该使用弱自我或其他东西来设置属性吗?
//在HomeViewController.m中
@interface HomeViewController() <UICollectionViewDataSource>
@property (strong, nonatomic) IBOutlet UILabel *HomeLabel;
@property (strong, nonatomic) IBOutlet UICollectionView *ProjectCollectionView;
@property (strong, nonatomic) UserModel * HomeViewUserModel;
@end
/**
* fetch latest projects from remote side
*/
- (void) fetchUserModelFromRemote {
[MySharedInstance getProjectDataOnSuccess:^(id result) {
NSDictionary *data = result[@"data"];
self.HomeViewUserModel = [[UserModel alloc] initWithDataSource:data];
[[NSNotificationCenter defaultCenter] postNotificationName:@"alertCountUpdate" object:self userInfo:@{@"count": (NSNumber *)data[@"unread"]}];
}onFailure:^(id error) {}];
[MyCache cacheProjectListWithData:self.HomeViewUserModel];
}
答案 0 :(得分:2)
如果self
保留对其所访问的块的引用,那么它应该只是一个问题。但是如果您想要安全,那么只需在块之外,您就可以分配一个弱变量的self&#39; s键入自我,以便您访问自我的弱版本,减轻任何疑虑,例如:
__weak TypeOfSelf weakSelf = self;
//use weakSelf in block
也许可以添加一些零检查以确保它在执行任何操作之前仍然存在
答案 1 :(得分:1)