0

当我使用

NSLog("view = %@", view)

我会得到类似的结果:

UIImageView: 0x79908a0; frame = (0 0; 320 548); clipsToBounds = YES; opaque = NO; gestureRecognizers = <NSArray: 0x7969370>; layer = <CALayer: 0x79900f0>

但我只查看了哪些地址:

UIImageView: 0x79908a0

有可能处理吗?

4

3 回答 3

4

您可以使用%p格式(以格式打印任何指针的内容0x...):

NSLog("view = %p", view)
// Output: view = 0x79908a0
于 2013-07-04T13:05:23.533 回答
0

NSString:description 是当你像这样将它的一个实例传递给 NSLog 时在一个类上调用的,所以你可以重写它来产生你喜欢的任何东西。

如果你真的想这样做,你可以覆盖一个类别中的 UIView 描述类并忽略如下警告:

注意:此行为未定义:“如果在类别中声明的方法的名称与原始类中的方法相同......行为未定义在运行时使用哪种方法实现”。所以使用风险自负!

@interface UIView (Overide)
@end

@implementation UIView (Overide)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
- (NSString *) description {
    return [NSString stringWithFormat:@"%@: %p", NSStringFromClass(self.class), self];
}
#pragma clang diagnostic pop

@end

您只需要将它导入到您的预编译头文件 (.pch) 中,它将立即在您的整个项目中生效。

于 2013-07-04T13:26:36.803 回答
0
UIView *obj = [[UIView alloc]initWithFrame:CGRectMake(10, 10, 10, 10)];
NSString *addr = [NSString stringWithFormat:@"%p", obj];
NSLog(@"Address is = %@",addr);

使用%p格式化程序获取对象的地址。结果将以0x十六进制开头的字符串。

于 2013-07-04T13:06:46.170 回答