调试@property / ivar值

时间:2012-03-05 10:24:58

标签: iphone ios xcode debugging properties

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

我正在以编程方式尝试创建UIImageView并将其显示在UIWindow的新实例中,并且我正在使用调试器检查值以查看它无效的原因。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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