zoukankan      html  css  js  c++  java
  • Objective-C NSValue类的常用方法

    NSValue类是OC中用来存储任意值的容器,是NSNumber的父类,NSNumber类是用来封装基本数据类型的

    初始化方法:

    - (instancetype)initWithBytes:(const void *)value
                         objCType:(const char *)type
    //便利构造器方法
    + (NSValue *) valueWithBytes:(const void *)value
                       objCType:(const char *)type

    第一个参数为要封装的变量的地址,第二个参数用来描述该数据类型的字符串,可以用@encode编译器指令自动生成该字符串

    用法:

    //自定义结构体类型Student
    typedef struct student{
            char name[50];
            char sex[2];
            NSInteger age;
            NSInteger grade;
            char number[50];
        }Student;
    //创建结构体stu
    Student stu = {"smithjackyson","男",23,98,"3112006304"};
    //创建NSValue实例value存储stu
    NSValue *value = [[NSValue alloc] initWithBytes:&stu objCType:@encode(Student)];
    NSValue *value1 = [NSValue valueWithBytes:&stu objCType:@encode(Student)];

    获取value中存储的对象如下:

    //定义一个新结构体变量stu1
    Student stu1;
    //将value中存储的结构体赋值给stu1
    [value getValue:&stu1];

    判断两个NSvalue存储的对象是否相同

    - (BOOL)isEqualToValue:(NSValue *)aValue

    存储各种类型的便利构造器和属性,以及获取对应值的方法:

    + (NSValue *)valueWithRange:(NSRange)range
    @property(readonly) NSRange rangeValue
    
    + (NSValue *)valueWithCGPoint:(CGPoint)point
    - (CGPoint)CGPointValue
    
    + (NSValue *)valueWithCGVector:(CGVector)vector
    - (CGVector)CGVectorValue
    
    + (NSValue *)valueWithCGSize:(CGSize)size
    - (CGSize)CGSizeValue
    
    + (NSValue *)valueWithCGRect:(CGRect)rect
    - (CGRect)CGRectValue
    
    + (NSValue *)valueWithPointer:(const void *)aPointer
    @property(readonly) void *pointerValue
    
    + (NSValue *)valueWithNonretainedObject:(id)anObject
    @property(readonly) id nonretainedObjectValue
    
    + (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform
    - (CGAffineTransform)CGAffineTransformValue
    
    + (NSValue *)valueWithUIEdgeInsets:(UIEdgeInsets)insets
    - (UIEdgeInsets)UIEdgeInsetsValue
    
    + (NSValue *)valueWithUIOffset:(UIOffset)insets
    - (UIOffset)UIOffsetValue
    
    + (NSValue *)valueWithCATransform3D:(CATransform3D)aTransform
    @property(readonly) CATransform3D CATransform3DValue
    
    + (NSValue *)valueWithCMTime:(CMTime)time
    @property(readonly) CMTime CMTimeValue
    
    + (NSValue *)valueWithCMTimeRange:(CMTimeRange)timeRange
    @property(readonly) CMTimeRange CMTimeRangeValue
    
    + (NSValue *)valueWithCMTimeMapping:(CMTimeMapping)timeMapping
    @property(readonly) CMTimeMapping CMTimeMappingValue
    
    + (NSValue *)valueWithMKCoordinate:(CLLocationCoordinate2D)coordinate
    @property(readonly) CLLocationCoordinate2D MKCoordinateValue
    
    + (NSValue *)valueWithMKCoordinateSpan:(MKCoordinateSpan)span
    @property(readonly) MKCoordinateSpan MKCoordinateSpanValue
    
    + (NSValue *)valueWithSCNVector3:(SCNVector3)vector
    @property(nonatomic, readonly) SCNVector3 SCNVector3Value
    
    + (NSValue *)valueWithSCNVector4:(SCNVector4)vector
    @property(nonatomic, readonly) SCNVector4 SCNVector4Value
    
    + (NSValue *)valueWithSCNMatrix4:(SCNMatrix4)
    @property(nonatomic, readonly) SCNMatrix4 SCNMatrix4Value
    

    转载请注明:作者SmithJackyson

  • 相关阅读:
    在一个页面用Ajax访问另一个页面弹出询问框怎么办
    还有一张呢
    系统相关信息查看
    linux dd 命令使用说明
    Github 使用说明
    Hadoop HA 资料
    fedora 在virtualbox安装guest additions
    git 使用记录
    linux console 小技巧
    Agent admitted failure to sign using the key 错误及解决方法
  • 原文地址:https://www.cnblogs.com/smithjackyson/p/5059250.html
Copyright © 2011-2022 走看看