【问题标题】:Debugging @property / ivar values调试@property / ivar 值
【发布时间】:2012-03-22 19:55:02
【问题描述】:

如果您将指针定义为@property 并在@interface 中定义为实例变量,是否会生成同一变量的两个版本?你应该做一个还是另一个?

我正在以编程方式尝试创建 UIImageView 并将其显示在 UIWindow 的新实例中,并且我正在使用调试器检查值以了解它为什么不起作用。

如果我只是将 UIWindow * 定义为 @property 而不是 ivar,它不会出现在调试器数据窗口中,但 printf 将其值设为 0x6D4CD00。 如果我将它定义为@property 和 ivar,那么我可以在调试器中看到它,但它是 0x0,而 printf 仍然显示 0x6D4CD00。 它们是两个不同的变量吗? 为什么我在调试器中看不到@property? (iPhone 模拟器)+(ARC=on)

【问题讨论】:

  • 该属性只是生成getter setter方法,返回实例变量,或为其分配新值。实际数据存储在一个地方 - 通过实例变量。

标签: iphone ios xcode debugging properties


【解决方案1】:

同意@nikolai-ruhe 的观点,没有明确声明实例变量的代码原因,但在调试器中立即访问(通过旋转self)以查看这些变量的内容会很有帮助。不过,这完全是一种意见;你也可以随时用po [self valueForKey:@"variableName"] 反省。

【讨论】:

  • 有点糟糕,在调试器中访问属性值太难了。
  • 阿门那个兄弟;讨厌它!
【解决方案2】:

使用关键字@property 声明属性不会创建任何实例变量。将属性连接到变量的是@synthesize 指令。

实例变量的名称是通过@synthesize foo = _foo 表示法显式指定的,或者默认情况下是属性名称本身。

@synthesize 指令可以将显式声明的实例变量连接到属性,或者,如果没有具有属性标识符的变量,则隐式创建一个。

通常没有理由显式声明实例变量。

【讨论】:

    猜你喜欢
    • 2011-07-18
    • 1970-01-01
    • 2015-05-16
    • 2012-10-08
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多