当我使用
NSLog("view = %@", view)
我会得到类似的结果:
UIImageView: 0x79908a0; frame = (0 0; 320 548); clipsToBounds = YES; opaque = NO; gestureRecognizers = <NSArray: 0x7969370>; layer = <CALayer: 0x79900f0>
但我只查看了哪些地址:
UIImageView: 0x79908a0
有可能处理吗?
您可以使用%p格式(以格式打印任何指针的内容0x...):
NSLog("view = %p", view)
// Output: view = 0x79908a0
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) 中,它将立即在您的整个项目中生效。
UIView *obj = [[UIView alloc]initWithFrame:CGRectMake(10, 10, 10, 10)];
NSString *addr = [NSString stringWithFormat:@"%p", obj];
NSLog(@"Address is = %@",addr);
使用%p格式化程序获取对象的地址。结果将以0x十六进制开头的字符串。