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