【问题标题】:Reference to object returns null (iOS class inheritance)对对象的引用返回 null(iOS 类继承)
【发布时间】:2013-11-12 15:16:37
【问题描述】:

我是 iOS 编程新手,在类继承方面遇到了一些问题。

我有一个带有对象的类(在 .h 中初始化为属性)

@property (nonatomic, weak) NSNumber *count;

在特定功能中每按下一个按钮,它就会递增。

在另一个类中我引用它:

#import "otherClass.h"
...
otherClass *otherC = [[otherClass alloc]init];
NSLog(@"COUNT: %@", otherClass.count);

无论我如何尝试,输出仍然为空。我不确定我是否执行错误。请帮忙!

**找到解决方案

(1) 定义一个新类,将其命名为 RSModel (2) 将 @property (nonatomic) NSInteger 计数连同您定义的实例方法一起移动到该新类中。实例方法需要更改返回RSModel (3) 在所有需要访问计数的视图控制器中,包含“RSModel.h”,并写入[RSModel instance].count 以访问共享计数器。

【问题讨论】:

    标签: ios objective-c class inheritance


    【解决方案1】:

    当你定义一个属性weak时,意味着至少存在一个对同一个对象的强引用,这使得它不会被释放。看起来你的情况并非如此。此外,看起来你不需要NSNumber - NSInteger 应该就足够了。在这种情况下,您无需担心弱/强的区别:

    @property (nonatomic) NSInteger count;
    
    ...
    therClass *otherC = [[otherClass alloc]init];
    NSLog(@"COUNT: %d", otherClass.count);
    

    但是请注意,由于count 是一个实例属性,因此需要在otherClass 的同一个实例上进行递增。该类的所有新对象都将其count 属性设置为默认值零。

    【讨论】:

    • 问题是我必须在不同的视图中显示计数(显示一种“活动日志”),这需要不同的类(据我所知,我不是使用情节提要)有没有办法将计数值保存在其他地方以传递它/让其他类完全获取值?
    • @jcaso 绝对有!使用您的计数器 (here is how) 创建一个单例对象,将其实例化一次,然后在所有控制器中继续使用它。
    • 谢谢!你能给我一个我的代码的例子吗?我仍然对如何使用它来访问计数器感到有些困惑:X
    • @jcaso 您是否按照我之前评论中链接中的示例进行操作?请使用您的更改结果更新您的代码,我会帮助您修复它。
    • 我刚刚将它包含在我上面的原始问题中。我只是不确定如何处理它
    【解决方案2】:

    通过将您的@property 声明为弱,您是在说其他人拥有该对象,如果没有其他人指向它,则自动释放它并将其设置为 nil。我猜这不是你想做的。尝试将其更改为:

    @property (nonatomic, strong) NSNumber *count;
    

    【讨论】:

      猜你喜欢
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多