---------------------------------------- android培訓、java培訓、期待與您交流! -------------------------------------------
一、-description方法(決定了實例對象的輸出結果)
使用NSLog和%@輸出某個對象時,會調用對象的-description方法,並拿到返回值進行輸出
二、+ description方法(決定了類對象的輸出結果)
使用NSLog和%@輸出某個類對象時,會調用類對象+description方法,並拿到返回值進行輸出
1)默認,不重寫的輸出
Class c = [Person class];//得到類對象c
// 1.會調用類的+description方法
// 2.拿到+description方法的返回值(NSString *)顯示到屏幕上
NSLog(@"%@", c);
輸出:Person2)重寫在Person.m 的+description方法
// 決定了類對象的輸出結果+ (NSString *)description
{
return @"Abc";
}
執行1)中會輸出:Abc
三、修改NSLog的默認輸出
1、重寫-description或者+description方法即可
1)在Person.m文件重寫-description / +description方法
@implementation Person
// 決定了實例對象的輸出結果
- (NSString *)description
{
// 下面代碼會引發死循環,不要在description 做輸出
// NSLog(@"%@", self);
return [NSString stringWithFormat:@"age=%d, name=%@", _age, _name];
}
@end
2)在main.m文件
Person *p = [[Person alloc] init];
p.age = 20;
p.name = @"Jack";
// 默認情況下,利用NSLog和%@輸出對象時,結果是:<類名:內存地址>
// 1.會調用對象p的-description方法
// 2.拿到-description方法的返回值(NSString *)顯示到屏幕上
// 3.-description方法默認返回的是“類名+內存地址”
NSLog(@"%@", p);
3)輸出:
age=20,name=Jack
1、 如果在-description方法中使用NSLog打印self
五、 打印增強
Person *p = [[Person alloc] init];
1)打印對象地址:%p 如:NSLog(@"%p",p); 輸出:0x1001097602) 打印對象 <類名:對象地址>:%@ 如:NSLog(@"%@",p); 輸出:<Person: 0x100109760>
3) 指針變量的地址:NSLog(@"%@",&p); 輸出:0x7fff5fbff7d0
4)打印當前行號:NSLog(@"%d", __LINE__);
5) NSLog輸出C語言字符串的時候,不能有中文:NSLog(@"%s", __FILE__);
6) 輸出源文件的名稱: printf("%s\n", __FILE__);
7) 輸出當前函數名: NSLog(@"%s\n", __func__);
---------------------------------------- android培訓、java培訓、期待與您交流! -------------------------------------------