如果您将指针定义为@property
并且还将其定义为@interface
中的实例变量,那么它是否会生成同一变量的两个版本?你应该做其中一个吗?
我正在以编程方式尝试创建UIImageView
并将其显示在UIWindow
的新实例中,并且我正在使用调试器检查值以查看它无效的原因。
如果我只将UIWindow *
定义为@property
而不是ivar,它不会出现在调试器数据窗口中,但printf将其值设为0x6D4CD00。
如果我将其定义为@property
和ivar,那么我可以在调试器中看到它,但它是0x0而printf仍然说是0x6D4CD00。
它们是两个不同的变量吗?
为什么我在调试器中看不到@property
? (iPhone模拟器)+(ARC =开启)
答案 0 :(得分:2)
使用关键字@property
声明属性不会创建任何实例变量。它是将属性连接到变量的@synthesize
指令。
实例变量的名称可以通过@synthesize foo = _foo
表示法明确指定,或者默认情况下是属性名称本身。
@synthesize
指令可以将显式声明的实例变量连接到属性,或者,如果没有带有属性标识符的变量,则隐式创建一个。
通常没有理由明确声明实例变量。
答案 1 :(得分:1)
同意@ nikolai-ruhe没有明确声明实例变量的代码原因,但在调试器中立即访问(通过调低self
)以查看这些变量的内容会很有帮助。完全是一个意见的事情;你也可以随时用po [self valueForKey:@"variableName"]
反省。