我已經讓用戶報告應用程序中的隨機崩潰,特別是在其他應用程序之間切換時。不幸的是,目前我無法複製崩潰或獲取崩潰日誌。在我的iPhone應用程序,我已經在那裏我存儲變量,我指的是整個應用程序的靜態類 - 我有一種預感,這是什麼原因造成的問題:假設靜態變量永遠不會被清除是否安全?
namespace DemoApp.BusinessLogic
{
public static class AppController
{
public static string WebServiceURL { get; set; }
public static int UserId { get; set; }
public static User User { get; set; }
//...
}
}
的這些值都開始當用戶首先登錄到應用程序。我的理解是靜態引用永遠不會被ARC清除,這是正確的嗎?我可以安全地假設,在應用程序關閉之前,這些值永遠不會被清除?
我可以取代以引用這些靜態值NSUserDefaults
:
namespace DemoApp.BusinessLogic
{
public static class AppController
{
public static string WebServiceURL {
get {
return NSUserDefaults.StandardUserDefaults.StringForKey("WebServiceURL");
}
set {
NSUserDefaults.StandardUserDefaults.SetString(value, "WebServiceURL");
}
}
public static string UserId {
get {
return NSUserDefaults.StandardUserDefaults.StringForKey("UserId");
}
set {
NSUserDefaults.StandardUserDefaults.SetString(value, "UserId");
}
}
//...
}
}
這是做事情的更好的辦法?
只是澄清 - 在上面的示例中,我將AppController.User設置爲登錄過程中的新用戶對象。然後我在代碼的某些部分調用它,例如AppController.User.FirstName。因爲我沒有在其他地方引用這個AppController.User對象,這是否會使它變弱並因此被清除? – Joseph
@Joseph使變量變弱的唯一方法是在其聲明中添加'weak'關鍵字。您使用變量的方式不會改變其強/弱的名稱。 – dasblinkenlight