我正在努力去掌握如何才能认识到一个强大的保留周期是可能的,并要求我使用[weak/unowned self] 。 我被不必要地使用[weak/unowned self]烧毁了,在给我机会使用它之前,我自己就被释放了。 例如,下面是在闭包中引用self的asynchronousnetworking调用。 可以在这里发生内存泄漏,因为networking调用是在不将自身调用存储到variables的情况下进行的? NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) { (data, response, error) in self.data = data ) 下面是使用NSNotificationCenter的另一个例子,可以稍后进行asynchronous调用: NSNotificationCenter.defaultCenter().addObserverForName( UIApplicationSignificantTimeChangeNotification, object: nil, queue: nil) { [unowned self] _ in self.refresh() } 我的问题是在什么情况下可能有强大的保留周期? 如果我在一个闭包中进行一个asynchronous调用或静态调用来引用self,是否会使它成为[weak/unowned self]的候选人呢? 感谢您排除这一点。
可能重复: 为什么弱的NSString属性不能在iOS中发布? 我是Objective C的新手,我有一些问题,我不能回答自己。 我有一个用于testing__weakvariables的代码块(当然,我正在使用ARC): NSString *myString = [[NSString alloc] initWithFormat:@"John"]; NSString * __weak weakString = myString; myString = nil; //<– release the NSString object NSLog(@"string: %@", weakString); 上面的代码的输出是预期的,因为weakString是一个弱variables: 2013-01-02 11:42:27.481 ConsoleApp[836:303] string: (null) 但是当我修改代码到这个: NSString *myString = [[NSString alloc] initWithFormat:@"John"]; NSString * __weak weakString = myString; NSLog(@"Before: %@", weakString); //<— output to see if […]
我已经将我的项目切换到了ARC,而且我不明白我是否必须使用IBOutlet strong或weak 。 Xcode做到这一点:在界面生成器中,如果创build一个UILabel例如,我将其与助理编辑器连接到我的ViewController ,它创build此: @property (nonatomic, strong) UILabel *aLabel; 它使用strong ,而是我阅读RayWenderlich网站上的一个教程,说: 但是对于这两个特定的属性我有其他的计划。 我们将宣布它们变weak ,而不是strong 。 @property (nonatomic, weak) IBOutlet UITableView *tableView; @property (nonatomic, weak) IBOutlet UISearchBar *searchBar; 所有出口物业的推荐关系都Weak 。 这些视图对象已经是视图控制器视图层次结构的一部分,不需要保留在其他地方。 声明您的网点weak的一大优点是可以节省您编写viewDidUnload方法的时间。 目前我们的viewDidUnload如下所示: – (void)viewDidUnload { [super viewDidUnload]; self.tableView = nil; self.searchBar = nil; soundEffect = nil; } 现在可以将其简化为以下内容: – (void)viewDidUnload { [super viewDidUnload]; soundEffect […]