黑马程序员---Objective-C Foudation框架学习笔记之一
来源:互联网 发布:mac下制作dos 编辑:程序博客网 时间:2024/06/05 17:30
结构体、数字、字符串和集合
结构体:
NSRange(locationlength)
NSRange的创建:
@"i loveoc"
NSRange r1 = {2,4}; //不用
NSRange r2 ={.location = 2, .length = 4}; //不用
NSRange r3 =NSMakeRange(2, 4); //掌握
/* NSMakeRange源码:
NS_INLINE NSRangeNSMakeRange(NSUInteger loc, NSUInteger len)
{
NSRange r;
r.location = loc;
r.length = len;
return r;
}
*/
示例:
NSString *str =@"i love oc";
// 查找某个字符串在str中的范围
// 如果找不到,length = 0, location = NSNotFound = -1
NSRange range =[str rangeofString: @"java"];
NSLog(@"loc =%d, length = %ld", range.location, range.length);
还有其他结构体有
NSPoint\CGPoint
NSSize\CGSize
NSRect\CGRect(CGPoint CGSize)
创建方法都是NSMakeXXX,使用这些CGPointEqualPoint、CGRectContainsPoint等函数的前提是添加CoreGraphics框架
// 比较两个点是否相同
BOOL b =CGPointContainsPoint(CGPointMake(10, 10), CGPointMake(10, 10));
//......其他类型数据类似
字符串类NSString:
创建的类对象包含了指向超类的指针、类名和指向类方法的列表的指针。类对象还包含一个long 的数据,为新创建的类对象指定大小。
1> 字符串的创建
NSString *s1 = @"jack";
NSString *s2 = [[NSString alloc]initWithString:@"jack"];
NSString *s3 = [[NSString alloc]initWithFormat:@"age is %d", 10];
// C字符串 --> OC字符串
NSString *s4 = [[NSString alloc]initWithUTF8String:@"jack"];
// OC字符串 --> C字符串
const char *cs = [s4 UTF8String];
// 使用文件的内容创建字符串(NSUTF8String用到中文时就可以用UTF-8编码方式)
NSString *s5 = [[NSString alloc]
initWithContentsOfFile:@"users/apple/Desktop/1.txt"encoding:
NSUTF8StringEncodingerror: nil];
/*一般都会有一个类方法和对象方法配对
[NSString stringWithString: @""];
[NSString stringWithFromat: @""];
[NSStringstringWithCharacters:@""];
[NSString stringWithContentsOfFile:(NSString *) encoding: (NSStringEncoding) error: (NSError *__autoreleasing *)];
[NSURL URLWithString: @""];
*/
2> 字符串操作
NSMutableString *s1 = [NSMutalbeStringstringWithFormat:@"my age is 10"];
// 拼接
[s1 appendString:@"11 12"];
// 获取is的范围,然后从字符串中删除
Range range = [s1rangeOfString:@"is"];
[s1 deleteCharacterInRange: range];
NSMutableString可以在原字符串上做修改,NSString不可以只能通过如下操作:
讲结果返回给一个新的NSString对象
// NSString *s2 = [NSStringstringWithFormat:@"age is 10"];
// NSString *s3 = [s2 stringbyAppendingString:@"11 12"];
// 字符串的导出
NSString *str =@"jack\nrose\njim\n";
[strwritetoFile:@"Users/apple/Desktop/my.txt" atomically: YES encoding:NSUTF8StringEncoding error: nil];
或者
NSURL *url = [NSURL fileURLWithPath:@"Users/apple/Desktop/my2.txt"];
[str writeToUrl: url atomically: YESencoding: NSUTF8StringEncoding error: nil"];
NSString其他实用函数总结
NSString *height =[NSString stringWithFormat : @"You heightis %d feet,%d inches", 5,11];
返回字符串中的字符的个数:
unsigned int length = [heigth length];
返回Bool 值的字符串比较函数:
- (BOOL) isEqualToString :(NSString *)aString;//比较两个字符串的内容是否相等
可以使用compare :方法
-(NSComparisonResult)compare :( NSString *)string;//逐个字符比较
不区分大小写的比较:
-(NSComparisonResult)compare :( NSString *)string options:( unsigned)mask;
注意:NSComparisonResult 是一个枚举值
options 是一个位掩码,即:
NSCaseInsensitiveSearch:不区分大小写
NSLiteralSearch:进行完全比较,区分大小写
NSNumericSearch:比较字符串的字符个数,而不是字符值
检查字符串是否以另一个字符串开头
-(BOOL)hasPrefix : (NSString *)aString;
判断字符串是否是以另一个字符串结尾
-(BOOL)hasSuffix : (NSString *)aString;
如果你想知道字符串内的某处是否包含其他字符串,使用rangeOfString : 方法
-(NSRange)rangeOfString :( NSString *)aString;
NSString 是不可变的,NSMutableString 是可变的。用方法stringWithCapacity : 来创建
NSMutableString *string = [NSMutableStringstringWithCapacity :42];
可以使用appendString :或appendFormat : 来附加新字符串:
- (void) appendString :(NSString *)aString;
- (void) appendFormat :(NSString *)format , . . . ;
可以使用deleteCharactersInRange : 方法删除字符串中的字符
- (void) deleteCharactersInRange : (NSRange)range;
数字:
OC集合类不能存储基本数据类型(int, long, float, double等),但是在实际使用过程中又不得不存储这些数据类型,于是我们就可以借助NSNumber、NSValue来完成基本数据类型和数字对象的转换。
//基本数据类型的转换
NSNumber *num =[NSNumber numberWithInt: 10];
适用场合:
NSDictionary *dict= @{
@"name" : @"jack"
@"age" : num
};
还有一种更简单快捷的方法就是直接在数字前加@:
NSDictionary *dict= @{
@"name" : @"jack"
@"age" : @10
};
其他基本类型的转换类似:
@10.5
@YES
@'A' //转换成NSNumber对象
@"A" //转换成NSString对象
//数字对象类型的转换
NSNumber *n =[NSNumber numberWithDouble: 10.5];
int d = [ndoubleValue];
//NSString也可以做类似转换
NSSting *str =[NSString stringWithFormat: @"%d", a];
int d = [strintValue];
// NSNumber之所以能包装基本数据类型,是因为继承了NSValue
// 结构体可以先转换为OC对象
CGPoint p =CGPointMake(10, 10);
// 再转换为value对象
NSValue *value =[NSValue valueWithPoint: p];
//将value转换成对应的结构体
CGPoint pt = [valuepointValue];
//将value值存储在NSArray中并显示
NSArray *array =@[value];
NSLog(@"%@",array);
//集合
NSArray:用来存储对象的有序列表(任意类型的对象)
限制:只能存储OC对象,不能存储C 语言的基本数据类型(int、float、enum、struct、或者NSArray中的随机指针),同时也不能存储nil(对象的零值或NULL 值)。
1> NSArray的创建
NSArray *array =[NSArray arrayWithObject: @"jack"];
NSArray *array2 =[NSArray arrayWithObjects: @"jack", @"rose", nil];
NSArray *array3 =@[@"jack", @"rose", @"jim"];
2> NSArray元素的个数
NSLog(@"%ld",array3.count);
3> NSArray中元素的访问
// 获得特定索引处的对象
NSLog(@"%@",[array3 objectAtIndex: 1]);
或者
NSLog(@"%@",array3[0]);
切分数组:
使用componentsSeparatedByString : 来切分NSArray,
NSString *string =@"oop : ack : bork : greeble : ponies" ;
NSArray *chunks =[string componentsSeparatedByString : @":"];
使用componentsJoinedByString : 来合并NSArray 中的元素并创建字符串
string = [chunkscomponentsJoinedByString :@":-)"] ;
NSArray 是不可变数组,数组中包含的对象是可以改变的,但是数组对象本身是不会改变的。
1 >NSMutableArray的创建
+(id)arrayWithCapacity :(unsigned)numItems;
NSMutableArray*array = [NSMutableArray arrayWithCapacity : 17];
NSMutableArray*array2 = [NSMutableArray arrayWithObjects: @"jack",@"rose", @"jim", nil];
2> 添加元素
[arrayaddObject:[[Person alloc] init]];
[array addObject:@"jack"];
3> 删除元素
[arrayremoveAllObjects];
//删除制定对象
[arrayremoveObjectAtIndex: 0];
4> 遍历
for(id obj inarray)
{
NSUInteger i = [array indexOfObject:obj];
NSLog(@"%ld - %@", i, obj); //打印每个索引对应的元素
}
// Set
Set 是一组单值对象的集合,有可变和不可变,操作包括:搜索、添加、删除集合中的成员(仅用于可变集合)、比较两个集合,计算两个集合的交集和并集等。
1> NSSet的创建
NSSet *s = [NSSetset];
NSSet *s2 = [NSSetsetWithObjects: @"jack", @"rose", "jack2",@"jack3", nil];
2> 添加元素
[s addObject:@"hack"];
3> 删除元素
[s removeObject:(id)];
4> 随机去除取出一个元素
NSString *str =[s2 anyObject];
/*
NSSet 和 NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象(基本数据类型,int、char、float等,结构体、枚举)
* 本省都不可变,都有一个可变的子类
2> 不同点
* NSArray有顺序,NSSet没有顺序
*/
// NSDictionary
NSDictionary 通常在给定一个关键字(通常是一个NSString 字符串)下存储一个数值(可以是任何类型的对象)。然后你可以使用这个关键字查找相应的数值。
key ---> value(键值对)
索引---> 文字内容
1> NSDictionary的创建
NSDictionary *dict= [NSDictionary dictionaryWithObjects: @"jack" forkey:@"key"];
NSArray *keys =@[@"name" @"address"];
NSArray *objects =@[@"jack", @"北京"];
NSDictionary*dict2 = [NSDictionary dictionaryWithObjects: objects forkeys: keys];
NSDictionary*dict3 = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack", @"name",
@"北京", @"address",
@"13241234", @"qq",nil
];
NSDictionary*dict4 = @{@"name" : @"jack", @"address" :@"北京"};
2> 取字典中键值对的个数或某个key的值
long count =dict.count;
id obj =dict[@"name"];
//NSMutableDictionary
NSMutableDictionary*dict = [NSMutableDictionary dictionary];
1> 添加键值对
[dict setObject:@"jack", forkey: @"name"];
2> 移除键值对
[dictremoveObjectForKey: (id)];
3> 修改某个键值对的值
[dict setObject:@"rose", forkey: @"name"];
注意:字典中不允许有相同的key,但允许有相同的value(object); 字典无序
特殊用法:
NSArray *persons =@[
@{@"name" : @"jack",@"qq" : @"12342134", @[@"五分钟突破iOS", @"五分钟突破Android"]},
@{@"name" : @"jim",@"qq" : @"123421"},
@{@"name" : @"rose",@"qq" : @"234234"}
];
NSString *bookNmae= persons[0][@"books"][1];
/*
集合
1>NSArray\NSMutableArray
* 有序
* 快速创建(不可变):@[obj1, obj2, obj3];
* 快速访问元素:数组名[i]
2>NSSet\NSMutableSet
* 无序
3>NSDictionary\NSMutableDictionary
* 无序
* 快速创建(不可变):@{key1 : value1, key2 : value2}
* 快速访问元素:字典名[key]
*/
- 黑马程序员---Objective-C Foudation框架学习笔记之一
- 黑马程序员---Objective-C学习笔记之一
- 黑马程序员---Objective-C Foundation框架学习笔记之二
- 黑马程序员---C语言学习笔记之一
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第八章 Foudation Kit 介绍
- 黑马程序员——Objective-C学习笔记<九>:复习Fundation框架
- Objective-C学习笔记之一
- Objective-C中Foudation框架下的类和方法
- Objective-C中Foudation框架下的类和方法
- 【黑马程序员】Objective-C语言学习笔记之小知识点
- 【黑马程序员】Objective-C语言学习笔记之类(二)
- 黑马程序员---Objective-C学习笔记之二
- 黑马程序员---Objective-C 学习笔记之三
- 黑马程序员 — Objective-C学习笔记(二):继承
- 黑马程序员——Objective-C学习笔记(八): 属性
- 黑马程序员-IOS学习笔记(一)Objective-C概述
- 黑马程序员----Objective-C学习笔记之动态类型检测
- 黑马程序员----Objective-C学习笔记之构造方法
- Toposort(拓扑排序)——DFS递归回溯版
- 【Objective-C Runtime动态加载】---动态创建类Class
- 1058. A+B in Hogwarts (20)
- Hive tips optimil query on maper and reducer
- Matlab画平滑曲线的两种方法( 拟合或插值后再用plot即可)
- 黑马程序员---Objective-C Foudation框架学习笔记之一
- 深圳的回南天来了!七招教你如何在回南天防潮去湿~
- Matlab The Secant Method
- Xposed模块开发:修改设备IMEI
- 黑马程序员_JavaScript案例(一)
- error MSB4044: 未给任务“CppClean”的必需参数“FoldersToClean”赋值
- 第一周项目 程序阅读——初识对象 1.1
- Android访问网络,使用HttpURLConnection还是HttpClient?
- POJ1330.Nearest Common Ancestors——最近公共祖先(dfs+ST在线算法)