gpt4 book ai didi

用于跟踪第一次的 Objective-C 实例变量

转载 作者:行者123 更新时间:2023-12-03 16:40:40 25 4
gpt4 key购买 nike

当我的应用程序第一次启动时,我只需要执行一次操作。我的成功无需在后续发布中重复。

我正在使用使用属性的标准方法,并在第一次启动应用程序并且初始化代码成功时将其设置为 YES。

我有几个问题可以帮助我提高对 Objective-C 的理解,因此非常感谢专家的意见。

  1. 我假设我需要将属性属性设置为强,因为如果将其设置为弱,则与变量关联的内存可能会被释放。这是正确的吗?

  2. 将其设置为强会阻止我使用 BOOL 类型(错误表明我需要使用对象)

    • 要解决此问题,请将属性类型设置为 NSNumber,并在例程完成后将其设置为 @(YES),并将其与 @(YES) 进行比较,以查看是否需要在应用启动时完成初始化。

上述方法/理解正确吗?如果不是,我希望能指出问题所在。另外,即使上面的方法可行,但还有一种更优雅的方式来完成我想做的事情,请告诉我。

最佳答案

  1. I am assuming I need to set the property attribute to strong since the memory associated with the variable may be released if it is set to weak. Is this correct?

抱歉,

自动属性(您无需编写自己的 setter 和 getter 方法)的生命周期和内存行为与实例变量相同。所以:

  1. 属性的生命周期与其所属的对象实例相同 - 属性的存储是作为创建对象实例的一部分而创建的,并且它作为销毁实例的一部分而被销毁。
  2. 对于具有基本类型的属性;例如intdoubleBOOLNSInteger等;该值直接存储在属性中,不需要其他内存管理。
  3. 对于对象引用类型的属性;例如NSArray *NSNumber *等;存储在属性中的值是对对象的引用。在这种情况下,属性可以标记为strongweak等,以便 ARC 知道如何管理引用对象的生命周期(不是属性(property)的生命周期)。

因此,在您使用 BOOL 属性的情况下,您不需要 strongweak 等 - 对于这样的属性,它们是没有意义的属性(property)。您将属性转换为NSNumber *只是为了使其,没有必要这样做。

I am using the standard approach of using a property and setting it to YES the first time app is launched and initialization code succeeds

对于您的特定应用程序,这不是标准方法,您需要的是一个在应用程序启动之间持续存在的值,为此您可以使用 NSUserDefaults。特别是,您需要方法 boolForKey: 来检索当前值,并使用 setBool:forKey: 来设置值。

当您第一次运行应用程序时,您(显然!)尚未向 NSUserDefaults 写入任何值。在这种情况下,如果键的值尚未写入,则方法 boolForKey: 将返回 NO。因此,要在第一次运行时运行代码,您的应用程序所需要做的就是读取您将用于此操作的 key ,例如 @"firstRunDone",如果结果为 NO 执行首次运行的代码,然后将键值设置为 YES

HTH

关于用于跟踪第一次的 Objective-C 实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32243395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com