OC語言day08-12NSValue

pragma mark NSValue

pragma mark 概念

/**
 NSValue 其實是 NSNumber的子類
 
 - NSNumber 只能包裝 數(shù)字類型
 * NSValue  可以包裝 任意值
 
 1.為什么要使用 NSValue
 比如存儲的是一個結(jié)構(gòu)體 是放不進去到 NSNumber 里面的
 
 2.使用 NSValue 包裝系統(tǒng)的結(jié)構(gòu)體 (valueWithPoint:)
 ....
 
 3.使用 NSValue 包裝 自定義的 結(jié)構(gòu)體 (valueWithBytes : objCType)
 參數(shù)說明
 valueWithBytes : 接受一個指針,需要傳遞需要 包裝的 結(jié)構(gòu)體的變量 的地址 (&p)
 objCType : 需要傳遞 需要包裝的數(shù)據(jù)類型 @encode(Person)

 格式
 NSValue *valueP = [NSValue valueWithBytes:結(jié)構(gòu)體的指針地址 objCType:@encode(結(jié)構(gòu)體的名字)];
 NSArray *arr1 = @[valueP];
 
 4.從 NSValue 取出 自定義的 結(jié)構(gòu)體變量 (getValue:) 需要傳遞指針的地址
 參數(shù)說明
getValue:結(jié)構(gòu)體的指針地址
 
 */

pragma mark 代碼

#import <Foundation/Foundation.h>
#pragma mark 類

#pragma mark main函數(shù)
int main(int argc, const char * argv[])
{
#pragma NSValue
#warning 1.比如存儲的是一個結(jié)構(gòu)體 是放不進去到 NSNumber 里面的
    
    // 定義一個結(jié)構(gòu)體
    typedef struct {
        int age;
        char *name;
        double height;
        
    }Person;
    
    // 結(jié)構(gòu)體 不能通過 NSNumber 轉(zhuǎn)換成對象
    Person p = {24,"lyh",1.72};
//    NSArray *arr = @[p];
    
#warning 2.使用 NSValue 包裝系統(tǒng)的結(jié)構(gòu)體
    CGPoint point = NSMakePoint(10, 20);
    NSValue *value = [NSValue valueWithPoint:point];
    NSArray *arr = @[value];
    NSLog(@"arr = %@",arr);
    
#warning 3.使用 NSValue 包裝 自定義的 結(jié)構(gòu)體 (valueWithBytes : objCType)
    /**
     valueWithBytes : 接受一個指針,需要傳遞需要 包裝的 結(jié)構(gòu)體的變量 的地址 (&p)
     objCType : 需要傳遞 需要包裝的數(shù)據(jù)類型 @encode(Person)
     */
    NSValue *valueP = [NSValue valueWithBytes:&p objCType:@encode(Person)];
    NSArray *arr1 = @[valueP];
    NSLog(@"arr1 = %@",arr1);   //     "<18000000 00000000 4a0f0000 01000000 85eb51b8 1e85fb3f>"

#warning 4.從 NSValue 取出 自定義的 結(jié)構(gòu)體變量 (getValue:) 需要傳遞指針的地址
    /**
     
     */
    Person p1;
    [valueP getValue:&p1];
    NSLog(@"age = %i, name = %s ,height = %f",p1.age,p1.name,p1.height);
    

    return 0;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容