美文网首页
OC语言day08-12NSValue

OC语言day08-12NSValue

作者: liyuhong165 | 来源:发表于2016-07-31 22:41 被阅读35次

pragma mark NSValue

pragma mark 概念

/**
 NSValue 其实是 NSNumber的子类
 
 - NSNumber 只能包装 数字类型
 * NSValue  可以包装 任意值
 
 1.为什么要使用 NSValue
 比如存储的是一个结构体 是放不进去到 NSNumber 里面的
 
 2.使用 NSValue 包装系统的结构体 (valueWithPoint:)
 ....
 
 3.使用 NSValue 包装 自定义的 结构体 (valueWithBytes : objCType)
 参数说明
 valueWithBytes : 接受一个指针,需要传递需要 包装的 结构体的变量 的地址 (&p)
 objCType : 需要传递 需要包装的数据类型 @encode(Person)

 格式
 NSValue *valueP = [NSValue valueWithBytes:结构体的指针地址 objCType:@encode(结构体的名字)];
 NSArray *arr1 = @[valueP];
 
 4.从 NSValue 取出 自定义的 结构体变量 (getValue:) 需要传递指针的地址
 参数说明
getValue:结构体的指针地址
 
 */

pragma mark 代码

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

#pragma mark main函数
int main(int argc, const char * argv[])
{
#pragma NSValue
#warning 1.比如存储的是一个结构体 是放不进去到 NSNumber 里面的
    
    // 定义一个结构体
    typedef struct {
        int age;
        char *name;
        double height;
        
    }Person;
    
    // 结构体 不能通过 NSNumber 转换成对象
    Person p = {24,"lyh",1.72};
//    NSArray *arr = @[p];
    
#warning 2.使用 NSValue 包装系统的结构体
    CGPoint point = NSMakePoint(10, 20);
    NSValue *value = [NSValue valueWithPoint:point];
    NSArray *arr = @[value];
    NSLog(@"arr = %@",arr);
    
#warning 3.使用 NSValue 包装 自定义的 结构体 (valueWithBytes : objCType)
    /**
     valueWithBytes : 接受一个指针,需要传递需要 包装的 结构体的变量 的地址 (&p)
     objCType : 需要传递 需要包装的数据类型 @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 取出 自定义的 结构体变量 (getValue:) 需要传递指针的地址
    /**
     
     */
    Person p1;
    [valueP getValue:&p1];
    NSLog(@"age = %i, name = %s ,height = %f",p1.age,p1.name,p1.height);
    

    return 0;
}

相关文章

  • OC语言day08-12NSValue

    pragma mark NSValue pragma mark 概念 pragma mark 代码

  • 总结:八天学会OC语言(上)

    day1 OC语言day01-01OC的简介(附C语言知识点回顾)OC语言day01-02C和OC的对比OC语言d...

  • 编写高质量iOS与OS X代码的52个有效方法(一)

    这本书没有OC语言的基础知识,讲的是如何高效运用这门语言 第一章 熟悉OC 1、什么是OC ·OC是为C语言添加了...

  • iOS 开发之八天学会 OC 语言

    八天学会 OC 语言(上)八天学会 OC 语言(下)

  • Objective-C概述

    OC概述 • Objective-C简称OC,OC是C语言的扩充,并且OC是iOS和OS X操作系统的编程语言...

  • 面试题之 OC

    OC语言的特性? ①OC 语言是 C 语言的一个超集,在 C 的基础上添加了面向对象的特性;②OC 语言与 Jav...

  • OC对象 学习

    前言 对象是OC的基本单元,由于OC语言的特殊型,所以OC语言的对象或许会有和其他语言不一样的地方,今天来看看OC...

  • 我理解的runtime

    OC Runtime 对OC的理解与特性 OC是一门面向对象语言,既有静态语言的特性(C++),又有动态语言的特性...

  • 面向对象基本语法

    OC完全兼容C(.m)语言,可以在oc语言中混入c(.c)语言代码甚至是c++(.mm)代码。 oc关键字:基本上...

  • OC—面向对象

    1.OC: Object- C ,面向对象的语言 2、OC和C的区别 <1> oc是 c的超集 ,oc是在c语言的...

网友评论

      本文标题:OC语言day08-12NSValue

      本文链接:https://www.haomeiwen.com/subject/imlxsttx.html