[英]Memory issue when calling dispatch_async with local variable
調用dispatch_async時,我在代碼中遇到問題。 我認為這個問題是由於ARC在分塊中使用該對象之前回收了該對象,因為分派該對象的方法完成了。
- (void) method:(SomeClass *) someClass {
// local variable
NSNumber *someValue = someClass.somePropertyOnManagedObject;
dispatch_async(queue, ^() {
/* call some singleton object passing variable
* when access the variable, reference is nil
*/
[[DashboardFacade sharedInstance] someMethod:someValue];
});
}
看完許多文檔后,我得出結論
我認為解決方案是使用__block
修飾符,以便ARC保留變量。
我的問題是
__block
可以解決問題,而不會引入其他問題? 以上技術上是否正確,例如,使用__block可以解決問題,而不會引入其他問題?
是的,它在技術上是正確的,在ARC上, __block
允許您更改在塊上下文之外聲明的變量(在本例中為變量指向的位置,因為它是NSNumber *
)。
為什么我不能在Internet / Google上的任何地方找到它?
我認為問題與代碼的特定位置無關,而是其他原因。
僅在此分配之后為零時,塊內的someValue
才能為零:
NSNumber *someValue = someClass.somePropertyOnManagedObject;
塊保留由於塊內使用的那些變量而被塊捕獲的對象。 而且它是self還是塊可見的作用域中的局部變量都沒有關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.