iOS 簡單總結:description方法\NSLog函數


1.description方法是NSObject自帶的方法,包括類方法和對象方法

+ (NSString *)description; // 默認返回 類名 - (NSString *)description; // 默認返回 <類名:內存地址>

2.默認情況下利用NSLog和%@輸出對象的時返回的就是類名和內存地址

3.修改NSLog和%@的默認輸出:重寫類對象或者實例對象的description方法即可。因為NSLog函數進行打印的時候會自動調用description方法

/******************************** Person.h文件*********************************/
#import <Foundation/Foundation.h>

@interface Person : NSObject

+ (NSString *)description;
- (NSString *)description;

@property int age;
@property NSString *name;

@end



/******************************** Person.m文件*********************************/
#import "Person.h"
@implementation Person

#pragma mark 類對象輸出的結果
+ (NSString *)description
{
    return @"AAA";
}


#pragma mark 實例對象輸出的結果
- (NSString *)description
{
    // NSLog(@"%@",self); 引發死循環
    return [NSString stringWithFormat:@"name = %@ age = %d",_name,_age];
}
@end


/******************************** main.m文件***********************************/
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
    Class c = [Person class];
    NSLog(@"%@",c);
    
    Person *person = [[Person alloc] init];
    person.name = @"John";
    person.age = 20;
    
    // 執行NSLog函數的時候會調用description方法默認返回<類名/對象名: 地址>
    NSLog(@"%@",person);
    
}

 

/**************************** 豐富日志輸出 **********************************/
#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[])
{
    Person *person = [[Person alloc] init];
    
    // 打印person對象地址
    NSLog(@"%@",person); // <Person: 0x100200ae0>
    // 打印person指針的地址
    NSLog(@"%p",person); // 0x100200ae0 對象和指針地址一致
    
    // 指針變量的地址
    NSLog(@"%p",&person);// 0x7fff5fbff8e8
    
    // NSLog不能%s無法輸出帶有中文的文件路徑,可以用c語言中的printf和%s來代替
    // NSLog(@"%s",__FILE__);
    printf("%s",__FILE__);
    
    // 輸出當前方法
    NSLog(@"%s",__FUNCTION__);  // 返回 main
    
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM