黑馬程序員_OC基礎04_description方法(自定義打印輸出方法)

---------------------------------------- android培訓java培訓、期待與您交流! -------------------------------------------


一、-description方法(決定了實例對象的輸出結果


使用NSLog和%@輸出某個對象時,會調用對象的-description方法,並拿到返回值進行輸出


二、+ description方法(決定了類對象的輸出結果

使用NSLog和%@輸出某個類對象時,會調用類對象+description方法,並拿到返回值進行輸出

1)默認,不重寫的輸出
 Class c = [Person class];//得到類對象c
    // 1.會調用類的+description方法
    // 2.拿到+description方法的返回值(NSString *)顯示到屏幕上
NSLog(@"%@", c);
輸出:Person

2)重寫在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);  輸出:0x100109760
2) 打印對象 <類名:對象地址>:%@   如: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培訓、期待與您交流! -------------------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章