2011-12-19 43 views
1

請注意,我是而不是使用Interface Builder的在ARC下創建__weak UIViewController子視圖的簡明代碼

我已經做了我的子視圖__weak,以便它們在ARC 5上自動歸零,當它們所引用的對象被釋放時。這意味着我不必在viewDidUnload中手動將它們清零(這似乎是最安全的模式)。

但是因爲自己是弱者,我不能直接將它們分配給我的ivars當我alloc他們,或ARC立即釋放他們,我所發現的是,像這樣分配給一個臨時強大的本地變量的唯一解決方案:

UIView *strongTmp = [[UIView alloc] initWithFrame:self.view.bounds]; 
[self.view addSubview:strongTmp]; 
weakIVar = strongtmp; 

這是醜陋的,其目的不是沒有詳細的評論立即明顯。我想要的東西(更)優雅,如:

[self.view addSubview:weakIVar = [[UIView alloc] initWithFrame:self.view.bounds]]; 

但是,這產生相同的編譯器警告(該對象將立即分配後公佈)。

有什麼建議嗎?提前致謝。

+0

嘿布拉德/馬克斯,你找到了這個問題的答案?我只是在幾個地方遇到過這種情況,而且確實相當醜陋和煩人。 – SaamJB 2013-01-03 04:57:36

回答

1

的「分配給本地變量」技術是完全正常的,只是習慣了它,或使用筆尖。

0

一個(非理想)的解決方案是在相關類別中添加類級別的初始化,這有效地告訴ARC與一個UIView返回你的東西自動發佈的版本,在這裏一個例子:

@implementation UIView (mxcl) 
+ (id)viewWithFrame:(CGRect)frame { 
    return [[self alloc] initWithFrame:frame]; 
} 
@end 

weakIVar = [UIView viewWithFrame:self.view.bounds]; 
[self.view addSubview:weakIVar]; 

:您可以在任何UIView子類調用該方法,前提是子類的指定初始化仍initWithFrame。

請注意,我相信我在幾個月前測試了這個,但是沒有明確測試上面的代碼,請評論上面的例子是否需要修改。

相關問題