ios developer tiny share-20161017

来源:互联网 发布:mysql的触发器 编辑:程序博客网 时间:2024/05/21 22:27

今天讲Objective-C的NSValue,它可以代表更复杂的Objective-C的类型,比如NSRange,结构体类型。


Represent Other Values Using Instances of the NSValue Class


The NSNumber class is itself a subclass of the basic NSValue class, which provides an object wrapper around a single value or data item. In addition to the basic C scalar types, NSValue can also be used to represent pointers and structures.

The NSValue class offers various factory methods to create a value with a given standard structure, which makes it easy to create an instance to represent, for example, an NSRange, like the example from earlier in the chapter:

NSString *mainString = @"This is a long string";NSRange substringRange = [mainString rangeOfString:@"long"];NSValue *rangeValue = [NSValue valueWithRange:substringRange];

It’s also possible to create NSValue objects to represent custom structures. If you have a particular need to use a C structure (rather than an Objective-C object) to store information, like this:

typedef struct {    int i;    float f;} MyIntegerFloatStruct;

you can create an NSValue instance by providing a pointer to the structure as well as an encoded Objective-C type. The @encode() compiler directive is used to create the correct Objective-C type, like this:

struct MyIntegerFloatStruct aStruct;aStruct.i = 42;aStruct.f = 3.14;NSValue *structValue = [NSValue value:&aStruct withObjCType:@encode(MyIntegerFloatStruct)];

The standard C reference operator (&) is used to provide the address of aStruct for the value parameter.

0 0
原创粉丝点击