ios - 是否保证在系统更新/设备重启后调用 +load 方法?

标签 ios

我正在编写一个小型实用程序类来获取运行我的应用程序的 iOS 版本。我认为由于 iOS 版本在我的应用程序运行时不会更改,因此可以读取一次版本、缓存它然后返回缓存值(因为它需要字符串拆分、数组操作等)。执行此操作的好地方可能是我的实用程序类的 +load 方法:它只会被调用一次,我不需要任何额外的 if setter/getter 。这是我想出的:

实用程序.h:

#import <Foundation/Foundation.h>

@interface Utils : NSObject

/**
 *  Returnes a major part of the iOS version that runs on the current device.
 *  I.e. returns 8 for iOS 8.1.2
 */
+(int)iOSMajorVersion;

/**
 *  Returns a minor part of the iOS version that runs on the current device.
 *  I.e. returns 1 for iOS 8.1.2 or 0 for iOS 7.0.1.
 */
+(int)iOSMinorVersion;

@end

实用程序.m:

#import "Utils.h"
#import <UIKit/UIKit.h>

@implementation Utils

static int minorVersion = -1;
static int majorVersion = -1;

+(void)readVersions {
    NSArray *versions = [[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."];
    majorVersion = [versions[0] intValue];
    if (versions.count > 1) {
        minorVersion = [versions[1] intValue];
    }
    else {
        minorVersion = 0;
    }
}

+(void)load {
    [self readVersions];
}

+(int)iOSMajorVersion {
    return majorVersion;
}

+(int)iOSMinorVersion {
    return minorVersion;
}

@end

但后来我想:如果用户在我的应用程序运行时收到 iOS 更新怎么办?然后设备会重启,但是+load会在更新后启动应用时再次调用吗?我的意思是,如果它是更新之前运行的最后一个应用程序,iOS 是否有可能以某种方式缓存运行时,并且不会再次重新初始化它?

在我看来,应该重新初始化运行时。毕竟这是不同的运行时(iOS 已更新),但出于好奇,我想知道是否有人确定。

谢谢。

附言我知道这个“优化”不值得(这个功能在我的应用程序中不会经常使用),但这是我的个人项目,所以我也将它用于教育目的。再说了,一次写好了,以后可以复用,不用考虑这样的问题:)

附言出于明显的原因,我无法运行测试来通过实验找出它。因此,我的问题。

最佳答案

如果应用程序从设备上的内存中删除,则需要重新加载代码资源并再次调用 +load 方法。真正的问题是,当发生版本更改时,应用程序是否总是会从内存中删除。迄今为止,安装更新后 iOS 会重新启动时,情况就是如此,但这并不是您真正应该依赖的。将来可能会发布安全更新(例如)作为更改 iOS 版本但实际上不需要系统重启或 RAM 状态更改的快速补丁。

虽然不太可能,但在应用完成启动或进入前台(取决于信息是什么)时缓存此类信息会更好、更安全。

关于ios - 是否保证在系统更新/设备重启后调用 +load 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27676132/

相关文章:

ios - Xcode 数据模型编译器 - MOMC 错误 : Command momc failed with exit code 1

ios - 无法更改 UItableviewcell Button 的图像

objective-c - 调试是唯一在 Objective C 程序中使用 iVars 有意义的情况吗?

ios - ios 的 sqlite3_open 代码放置在哪里

ios - Facebook iOS SDK 强制登录

ios - UIImagePicker Controller 即使有 plist 条目也不请求权限

ios - 如何将现有 iOS 应用程序升级到 Xamarin Forms 应用程序

ios - -[非类型保留] : message sent to deallocated instance

javascript - cordova inappbrowser 无法在 iOS 上打开外部 url

ios - 如何使用 Objective-C SDK 使用 Gmail API 将邮件设置为未读/已读?