在Swift

时间:2018-01-25 06:51:24

标签: ios swift performance security static

我有一个结构类,我存储数据有关手机和应用程序属性,如screenResolution,PhoneModel,ApplicationInstalledDate,wifiDetailInfo。当应用程序打开时,它将被宣布一次。我想为每个属性编写函数,因为有30个属性,在init方法中我想调用每个函数来声明属性。当我搜索时,我不能直接像

那样做
property = self.function()

所以我将函数声明为私有静态,如下面的代码所示。

我的问题是;

1-)当我声明并调用这样的函数时,它们将作为异步工作吗?如果没有,这将是一个性能问题,因为我在应用程序启动(AppDelegate)上调用这些,我不确定它们是否会影响应用程序的开放时间。

2-)此外,我的应用程序需要是安全的。也许这是一个愚蠢的问题,但我想到了一些事情。如果我声明一个函数静态,即使它是私有的,在逆向工程并尝试更改或获取某些数据时是否更容易达到?

struct DeviceDataModel {
    let applicationInstalledDate: String
    //Continue

    init?(){
        applicationInstalledDate = DeviceDataModel.getApplicationInstalledDate()

    }
    private static func getApplicationInstalledDate() -> String{
        let urlToDocumentsFolder = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last!
        //installDate is NSDate of install
        return (try! FileManager.default.attributesOfItem(atPath: urlToDocumentsFolder.path)[FileAttributeKey.creationDate] as! String)
    }
}

1 个答案:

答案 0 :(得分:1)

除非您这样定义,否则任何函数都不是异步的。因此,如果这些函数是由您定义的,并且您没有使它们异步(通过在后台线程上执行并调用回调以在完成时通知),则它们不是异步的。有关异步方法的一些见解,请查看this articlethis article

关于第二个问题 - 面向对象编程中的访问修饰符约为encapsulation and abstraction - 与应用程序安全性关系不大的概念 - 我不认为编写函数private而是internal(没有修饰符)会使代码反向工程变得更加困难。

只有我可以想象的可能影响这种情况的可能情况可能是使用public / open,因为这些函数可以在模块外部访问而无需任何逆向工程工具 - 但这需要攻击者将该应用程序添加为依赖项(他可以这样做,但我相信有更详细的方法来反向设计应用程序代码)。