我有2個類AuthManager
,AuthView
。我想在執行AuthView
文件(.m)中加載AuthView
的nib文件。 我AuthView
創建一個靜態方法:變量總是按值傳遞
+ (void)loadAuthView:(AuthView *)handle
{
NSBundle * sdkBundle = [NSBundle bundleWithURL:
[[NSBundle mainBundle]
URLForResource:SDK_BUNDLE_NAME withExtension:@"bundle"]];
// handle == nil
handle = [[sdkBundle loadNibNamed:AUTHVIEW_NIB_NAME owner:nil options:nil] firstObject];
// handle != nil
}
在AuthManager
,我有一個屬性:
@property (nonatomic, strong) AuthView * _authView;
與方法:
- (void)showAuthViewInView:(UIView *)view
{
if (__authView == nil) {
[AuthView loadAuthView:__authView];
// __authView (handle) == nil ??????????????
}
[__authView showInView:view];
}
問題:裏面的loadAuthView
,__authView
(handle
)is!= nil。但是__authView
在loadAuthView
之外後被釋放。
問題:爲什麼會發生?並且如何保持__authView
(handle
)不被釋放?
還有更多,如果我加載在AuthManager
筆尖,它工作正常。
- (void)showAuthViewInView:(UIView *)view
{
if (__authView == nil) {
NSBundle * sdkBundle = [NSBundle bundleWithURL:
[[NSBundle mainBundle]
URLForResource:SDK_BUNDLE_NAME withExtension:@"bundle"]];
__authView = [[sdkBundle loadNibNamed:AUTHVIEW_NIB_NAME owner:nil options:nil] firstObject];
}
[__authView showInView:view];
}
任何幫助或建議將不勝感激。
謝謝。
謝謝。我瞭解'void add(int b)'。但我通過'_authView'是一個指針。並且'handle = [[sdkBundle loadNibNamed ...'會使'__authView'改變? – anhtu
您需要使用雙指針來修改指針。我已經更新了我的答案以包含一個例子。 –
我試過'[AuthView loadAuthView:&__ authView];'並且得到錯誤**將非本地對象的地址傳遞給__autoreleasing參數用於回寫** – anhtu