您的位置:首页 > 职场人生

黑马程序员——【IOS】Foundation框架相关

2015-03-21 11:38 429 查看
-------
android培训、java培训IOS培训期待与您交流! ----------
Foundation框架

1.认识:我们之前的代码编写中,经常会写:#import <Foundation/Foundation.h>,因为Foundation框架中包含了很多的头文件(.h)所以为
了使用Foundation中的数据类型,我们必须包含Foundation框架。

2.结构体

常用结构体:在Foundation中定义了很多常用结构体类型来简化我们的日常开发,我们经常会用到的结构体有:

1>NSRange NSRange表示一个范围

2>NSPoint (CGPoint)NSPoint表示一个点

3>NSSize (CGSize)NSSize表示大小

4>NSRect(CGRect)
NSRect表示一个矩形

下面我们分别举出例子来说明各自的用法:

1>void NSRangeTest ()

{

NSRange rg={3,5};//第一参数是起始位置,第二个参数是长度

// NSRange rg={.location=3,.length=5};

NSRange rg2=NSMakeRange(3,5); //NSMakeRange定义一个NSRange

NSLog(@"rg2 is %@", NSStringFromRange(rg2));

//这里需要注意的是不能直接NSLog(@"rg2 is %@", rg2),因为rg2不是对象而是结构体

}

2> void NSPointTest()

{

NSPoint p=NSMakePoint(10, 15); // 这里的NSPoint其实就是CGPoint

NSPoint p2=CGPointMake(10, 15);

NSLog(NSStringFromPoint(p2));

}

3> voidNSSizeTest()

{

NSSize s=NSMakeSize(10, 15); //这里的
NSSize其实就是CGSize

//这种方式比较常见 CGSize s2=CGSizeMake(10, 15);

NSLog(NSStringFromSize(s2));

}

4>void
NSRectTest()

{

NSRect r=NSMakeRect(10, 5, 100, 200); //这里的NSRect其实就是CGRect

//这种方式比较常见 NSRect r2=CGRectMake(10, 5, 100, 200);

NSLog(NSStringFromRect(r2));

}

3.字符串

1>不可变字符串

字符串的创建:

char *str1="C string"; // 这是C语言创建的字符串

NSString *str2=@"OC string"; // OC字符串需要加@,并且这种方式创建的对象不需要自己释放内存

字符串的转换:

void test1()

{

NSLog(@"\"Hello world!\" to upper is %@",[@"Hello world!" uppercaseString]);

//结果:"Hello world!" to upper is HELLO WORLD!

NSLog(@"\"Hello world!\" to lowwer is %@",[@"Hello world!" lowercaseString]);

//结果:"Hello world!" to lowwer is hello world!



//首字母大写,其他字母小写

NSLog(@"\"Hello world!\" to capitalize is %@",[@"Hello world!" capitalizedString]);

//结果:"Hello world!" to capitalize is Hello World!



BOOL result= [@"abc" isEqualToString:@"aBc"];

NSLog(@"%i",result);

//结果:0

NSComparisonResult result2= [@"abc" compare:@"aBc"];//如果是[@"abc" caseInsensitiveCompare:@"aBc"]则忽略大小写比较

if(result2==NSOrderedAscending){

NSLog(@"left<right.");

}else if(result2==NSOrderedDescending){

NSLog(@"left>right.");

}else if(result2==NSOrderedSame){

NSLog(@"left=right.");

}

//结果:left>right.

}

//字符串分割

void test2()

{

NSLog(@"%@",[@"abcdef" substringFromIndex:3]);//从第三个索引开始(包括第三个索引对应的字符)截取到最
后一位

//结果:def

NSLog(@"%@",[@"abcdef" substringToIndex:3]);////从0开始截取到第三个索引(不包括第三个索引对应的字符)

//结果:abc

NSLog(@"%@",[@"abcdef" substringWithRange:NSMakeRange(2, 3)]);

//结果:cde

NSString *str1=@"12.abcd.3a";

NSArray *array1=[str1 componentsSeparatedByString:@"."];//字符串分割

NSLog(@"%@",array1);

/*结果:

(

12,

abcd,

3a

)

*/



}

2>可变字符串

我们知道在字符串操作过程中我们经常希望改变原来的字符串,当然这在C语言中实现比较复杂,但是ObjC为我们提供了
新的可变字符串类NSMutableString,它是NSString的子类。

#import <Foundation/Foundation.h>

int main() {



/*可变字符串,注意NSMutableString是NSString子类*/

//注意虽然initWithCapacity分配字符串大小,但是不是绝对的不可以超过此范围,声明此变量对性能有好处

NSMutableString *str1= [[NSMutableString alloc] initWithCapacity:10];

[str1 setString:@"hello"];//设置字符串

NSLog(@"%@",str1);

//结果:hello

[str1 appendString:@",world!"];//追加字符串

NSLog(@"%@",str1);

//结果:hello,world!

[str1 appendFormat:@"我的年龄是%i。dear,I love you.",18];

NSLog(@"%@",str1);

//结果:hello,world!我的年龄是18。dear,I love you.



//替换字符串

NSRange range=[str1 rangeOfString:@"dear"];

[str1 replaceCharactersInRange:range withString:@"Honey"];

NSLog(@"%@",str1);

//结果:hello,world!我的年龄是18。Honey,I love you.



//插入字符串

[str1 insertString:@"My name is Kenshin." atIndex:12];

NSLog(@"%@",str1);

//结果:hello,world!My name is Kenshin.我的年龄是18。Honey,I love you.



//删除指定字符串

[str1 deleteCharactersInRange:[str1 rangeOfString:@"My name is Kenshin."]];//删除指定范围的字符串

NSLog(@"%@",str1);

//结果:hello,world!我的年龄是18。Honey,I love you.



return 0;

}

4.数组

不可变数组:

voidtest1(){

//NSArray长度不可变所以初始化的时候就赋值,并且最后以nil结尾
    //此外需要注意NSArray不能存放C语言的基础类型
    NSObject *obj=[[NSObject alloc]init];
    NSArray *array1=[NSArray arrayWithObjects:@"abc",obj,@"cde",@"opq",@25, nil];
    NSLog(@"%zi",array1.count);//数组长度,结果:5
    NSLog(@"%i",[array1 containsObject:@"cde"]);//是否包含某个对象,结果:1
    NSLog(@"%@",[array1 lastObject]);//最后一个对象,结果:25
    NSLog(@"%zi",[array1 indexOfObject:@"abc"]);//对象所在的位置:0

}

数组的遍历:

	void test2(){
NSObject *obj=[[NSObject alloc]init];
NSArray *array=[[NSArray alloc] initWithObjects:@"abc",obj,@"cde",@"opq",@25, nil];
for(int i=0,len=array.count;i<len;++i){
NSLog(@"method1:index %i is %@",i,[array objectAtIndex:i]);
}
注意点:
1>NSArray中只能存放对象,不能存放基本数据类型,通常我们可以通过在基本数据类型前加@进行转换;
2>数组中的元素后面必须加nil以表示数据结束;
3>makeObjectsPerformSelector执行数组中对象的方法,其参数最多只能有一个;
4>上面数组操作中无论是数组的追加、删除、截取都没有改变原来的数组,只是产生了新的数组而已;
5>对象的比较除了使用系统自带的方法,我们可以通过自定义比较器的方法来实现;
可变数组:
可变数组中的元素后面必须加nil以表示数据结束;
往一个可变数组中添加一个对象,此时这个对象的引用计数器会加1,当这个对象从可变数组中移除其引用计数器减1。同时当整个数组	销毁之后会依次调用每个对象的releaes方法。
在不可变数组中无论对数组怎么排序,原来的数组顺序都不会改变,但是在可变数组中如果使用sortUsingSelector:排序原来的数组顺序	就发生了变化。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: