黑马程序员---Objective-C Foudation框架学习笔记之一

来源:互联网 发布:mac下制作dos 编辑:程序博客网 时间:2024/06/05 17:30
------- android培训、java培训、期待与您交流! ----------

结构体、数字、字符串和集合

结构体:

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]

*/

0 0
原创粉丝点击