黑马程序员 Foundation Kit中一些常用的类和结构体

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、

<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! -----------------------


Foundation Kit中一些常用的类和结构体

Foundation是OC中一个常用的,也是一个很基本的框架,里面涵盖很多基础性的类和一些数据结构。我这里就对一些常见的结构体的实现过程,和一些常用类的使用做一个学习笔记,能看的就看下,有不当之处还请指出。

首先,比较常用的结构体有:NSRange、NSPoint(CGPoint)、NSSize(CGSize)、NSRect(CGREct)。下面我一一给出它们大概的作用,和实现。NSRange是一个用来量定区间范围的结构体,常用在字符串中查找一定区间的子字符串,也可以用在数组中,在一定区间内的对象。其结构体内容:

typedef struct _NSRange

{

    unsigned int location;

    unsigned int length;

} _NSRange;

NSPoint和CGPoint是同一个结构体,表示的是一个点坐标(x和y),NSSize和CGSize是同一个结构体,表示一个区域的大小(包涵高和宽),NSRect和CGRect是一个结构体,表示的是某个坐标下的区域大小,(包含点坐标和区域大小)。下面给出点坐标结构体的实现,其他两个和很类似。

// NSPoint  equal in value CGPoint,they are struct and both means point

struct _CGPoint

{

    float x;

    float y;

};

// wo can use typedef get a other name

typedef struct _CGPoint _CGPoint;

typedef _CGPoint _NSPoint;

之后讲几个Foundation框中的类,NSString(NSMutableString)、 NSArray(NSMutableArray)、NSSet(NSMutableSet)、NSDictionary(NSMutableDictionary)、NSNumber(NSValue)、NSNull。其中含有Mutable类名的类都是属于可变类,与之对应的类是它的父类,它们一旦实例化就不能被修改。

NSString类是OC的字符串类,该类中封装对字符串的很多操作,如比较两个字符串、得到字符串的子串,判断两个字符串是否相等,得到字符串长度等等一些有关字符串的处理。该类对象创建后内容就不能修改,只能读取。要想不改变对象修改字符串内容用NSMutableString,该类有appendString:(NSString *)和appendFormat:@"...",...后者可在字符串中方变量然后输出。也可以删除字符串:deleteCharactersInRange:(NSRange)

 NSArray(NSMutableArray)、NSSet(NSMutableSet)、NSDictionary(NSMutableDictionary)这几个类是集合类,NSArray是一个对象数组类,里面可以放任何对像,可通过下标获取数组的内容如:array[i],NSSet对象和NSArray相似,都可以放任何对象,只是NSSet是无序的,而NSArray是有序的。也就是NSSet是不能通过下标来获得对象的,通常是通过它的方法- anyObject来随机获取对象,NSDictionary是一个字典类,通过类似字典索引的方式来存储数值或对象。对于可变与不可变,可变的类中都有一些关于添加的方法:addObject的方法(字典直接通过:setObject: forKey:来添加)。还有就是对象数组(NSArray)直接赋值的方式在OC的表示是这样的@[...]; 字典的方式:@{key:value....}。再集合类的最后给出一个关于排序的代码,用的NSArray的方法实现的。其中排序关键的两个方法是:sortedArrayUsingComparator:sortedArrayUsingFunction:context:

// sort

void _blockOfSort()

{

    // a string array

    NSArray *array = [NSArray arrayWithObjects:@"apple",@"cat",@"eat",@"boy",@"dog",@"love",@"helo_yd",@"qiube",nil];

    NSLog(@"unsorted array is %@",array);

    // sort to the string array

    NSArray *sort1 = [array sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2){

        NSLog(@"NSComparisonResult is %ld",[obj1 compare:obj2]);

        return [obj1 compare:obj2];

    }];

    NSLog(@"after sort is %@",sort1);

    // a Integer array

    NSArray *unsort = [NSArray arrayWithObjects:@23,@34,@1,@11,@3,@2,@23,nil];

    NSLog(@"after sort is %@",unsort);

    // sort to the integer array

    NSArray *sort = [unsort sortedArrayUsingFunction:intSort context:NULL];

    NSLog(@"after sort is %@",sort);

}

对于数字数组排序的关键是下面这个函数

// this funcation is the core of the Integer array sorting

NSInteger intSort(id num1, id num2, void *context)

{

    int v1 = [num1 intValue];

    int v2 = [num2 intValue];

    if (v1 < v2)

        return NSOrderedAscending;

    else if (v1 > v2)

        return NSOrderedDescending;

    else

        return NSOrderedSame;

}

NSNumber是NSValue的子类,NSNumber可以将数值类型(C类型)包装成对象类型,包装之后的数值可以放入对像数组中,而NSValue可以包装所有的非对象类型成对象。像结构体等。下面给出一个将结构体包装成对象然后用字符串结构的内容的例子:

    NSRect rect =NSMakeRect(0,0,10,10);

    NSValue *value = [NSValue valueWithBytes:&rect objCType:@encode(NSRect)];  // 包装过程,并将(NSRect)用字符串形式输出

    [value getValue:&rect];

    NSLog(@"%@",value); // 输出内容是:NSRect: {{0, 0}, {10, 10}}

最后一个NSNull,这个类是用来消除一些歧义的,比如在字典信息多的手,有些信息可能会是空的,但是没有填值就可能有这样的歧义:是信息没有呢?还是对象不存在呢?所以引入NSNull可以很好的消除信息没有这样的歧义。


---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、

<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! -----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值