【问题标题】:Get size of NSUserDefaults?获取 NSUserDefaults 的大小?
【发布时间】:2014-09-23 01:44:26
【问题描述】:

是否可以得到NSUserDefaults的总大小?因为我知道它将所有内容保存在.plist 文件中。找到那个文件然后看看它有多大应该不会太难。

【问题讨论】:

  • .plist 文件存在于cache 文件夹中。
  • plist 文件位于AppDirectory/Library/Preferences/<BundleIdentifier>.plist 下。尝试阅读attributes of this file
  • @Amar 是 iphone/iphone 模拟器中的那个文件夹吗?
  • 它是您在设备/模拟器上安装它时创建的应用程序目录。在模拟器上,这个路径是/Users/<username>/Library/Application Support/iPhone Simulator/<iOS version>/Applications/3FC9264F-371B-4DFC-8714-2726E45B0D6F/Library/Preferences
  • 您不应该对AppDirectory 路径进行硬编码...需要以编程方式执行并附加剩余路径,包括 plist 文件名和扩展名。 stackoverflow.com/a/3763050/1407017

标签: ios nsuserdefaults


【解决方案1】:

试试这个代码,

NSString* libraryDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* filepath = [libraryDir stringByAppendingPathComponent:[NSString stringWithFormat:@"/Preferences/%@.plist",[[NSBundle mainBundle] bundleIdentifier]]];
long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:filepath error:nil][NSFileSize] longLongValue];

引用自我在 cmets 中提到的 link1link2 的代码。

您可能必须将其转换为在 Swift 中使用。

希望有帮助!

【讨论】:

    【解决方案2】:

    更新到 Swift-4

    static func getSizeOfUserDefaults() -> Int? {
        guard let libraryDir = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.libraryDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first else {
            return nil
        }
    
        guard let bundleIdentifier = Bundle.main.bundleIdentifier else {
            return nil
        }
    
        let filepath = "\(libraryDir)/Preferences/\(bundleIdentifier).plist"
        let filesize = try? FileManager.default.attributesOfItem(atPath: filepath)
        let retVal = filesize?[FileAttributeKey.size]
        return retVal as? Int
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 2012-06-21
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多