У меня были пользователи, сообщившие о случайных сбоях в приложении, особенно при переключении между другими приложениями. К сожалению, пока я не могу реплицировать крах или заполучить журналы сбоев. В моем приложении IOS, у меня есть статический класс, где я хранить переменную, я имею в виду по всему приложению - У меня есть подозрение, что это то, что вызывает вопрос:Можно ли считать, что статические переменные никогда не очищаются?
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 в новый объект User в процессе входа в систему. Затем я вызываю его в определенных частях кода, например, AppController.User.FirstName. Поскольку я не ссылаюсь на этот объект AppController.User где-нибудь еще, это делает его слабым и, следовательно, подлежащим очистке? – Joseph
@Joseph Единственный способ сделать переменную слабой - добавить в свое объявление ключевое слово 'weak'. То, как вы используете переменную, не меняет своего сильного/слабого обозначения. – dasblinkenlight