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

时间:2014-12-28 11:52:38

标签: ios

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

Utils.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

Utils.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是否有可能以某种方式cache运行时,并且不会再次重新初始化它?

从我的角度来看,应该重新初始化运行时。毕竟这是一个不同的运行时(iOS已经更新),但我只是出于好奇而想知道,如果有人确切知道的话。

感谢。

P.S。我知道这个“优化”不值得(这个功能在我的应用程序中不会经常使用),但它是我的个人项目,所以我也将它用于教育目的。此外,如果我写得好一次,我可以在以后重复使用它,而不用考虑这样的问题:)

P.P.S。出于显而易见的原因,我无法通过实验发现它。因此,我的问题。

1 个答案:

答案 0 :(得分:2)

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

虽然不太可能,但在应用程序完成启动或到达前台时(根据信息的含义)缓存此类信息会更好更安全。