【发布时间】:2011-12-06 02:13:28
【问题描述】:
我正在使用 XCode 4.2 进行开发,想知道如何对宏参数进行字符串化?我试图使用#,因为我认为我会在 C 中使用,但无济于事。这是我的宏:
#define ASSIGN_PROPERTY(PROP_NAME, PROP_NAME_PARAM) { \
if (PROP_NAME_PARAM == nil) { \
NSAssert(PROP_NAME != nil, @"#PROP_NAME is already nil"); \
PROP_NAME = nil; \
} else { \
NSAssert1(PROP_NAME == nil, @"#PROP_NAME is already set, address=%p", PROP_NAME); \
PROP_NAME = PROP_NAME_PARAM; \
} \
}
然后在一个将foo 作为属性的类中,我这样定义它的setter:
- (void) setFoo:(NSObject *)fooParam {
ASSIGN_PROPERTY(foo, fooParam)
}
假设客户端调用 setFoo 时使用了非 nil 值,但 foo 属性已经非 nil。我要打印宏:
foo 已设置,地址=0x5e55400
但它正在打印:
#PROP_NAME 已设置,地址=0x5e55400
有什么建议吗?
【问题讨论】:
-
为什么不直接使用@property (assign)?
-
@bryanmac 我想断言,如果我尝试在
foo已经是非 nil 时分配一个非 nil 值,或者在foo已经是 nil 时分配一个 nil 值。无论哪种情况,使用@property(assign)都会盲目地覆盖该值。
标签: ios objective-c xcode macros c-preprocessor