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

来源:互联网 发布:在淘宝上做充值有用吗 编辑:程序博客网 时间:2024/06/03 15:04

------- 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>voidNSRectTest()

{

 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:排序原来的数组顺序就发生了变化。

0 0
原创粉丝点击