天天看点

iOS Foundation 基础框架NSObject 基类2. 参考

基本的函数的使用,不多做介绍,照着敲一遍代码就明白了。。

NSObject 基类

1. NSString 字符串类

1. NSSttring

1. C 风格字符串和 OC 风格字符串之间的转换

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        char *str1 = "a string";
        NSString *str2 = [NSString stringWithUTF8String:str1];
        NSLog(@"str2 = %@", str2);        
        NSString *str3 = @"string";
        NSLog(@"str4 = %s", [str3 UTF8String]);
    }
    return ;
}
           

2. 创建字符串

1. 系统帮我们实例化对象和释放内存
NSString *str = @"string";



           
2. 需要手动释放内存
NSString *str = [[NSString alloc] init];
NSString *str = @"string";


           

3. 格式化字符串

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int a = ;
        int b = ;
        NSString *str = [NSString stringWithFormat:@"a = %d b = %d", a, b];
        NSLog(@"str = %@", str);
    }
    return ;
}
           

4. 拼接字符串

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str1 = @"string1";
        NSString *str2 = @"string2";
        NSString *str3 = [str1 stringByAppendingString:str2];
        NSLog(@"str3 = %@", str3);
    }
    return ;
}
           

5. 大小写转换

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str1 = @"STRing";
        NSString *str2 = [str1 lowercaseString];
        NSLog(@"str2 = %@", str2);
        NSString *str3 = [str1 uppercaseString];
        NSLog(@"str3 = %@", str3);
    }
    return ;
}
           

6. 字符串前缀、后缀

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str = @"www.google.com";
        BOOL hasPreFix = [str hasPrefix:@"www"];
        if (hasPreFix)
            NSLog(@"has prefix");
        else
            NSLog(@"not have prefix");
        BOOL hasSufFix = [str hasSuffix:@"com"];
        if (hasSufFix)
            NSLog(@"has suffix");
        else
            NSLog(@"not have suffix");
    }
    return ;
}
           

7. 字符串相等性判断

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str1 = @"www.apple.com";
        NSString *str2 = @"www.aple.com";
        if ([str1 isEqualToString:str2])
            NSLog(@"equal");
        else
            NSLog(@"not equal");
    }
    return ;
}
           

8. 字符串比较

NSComparisonResult 方法

9. 字符串分割

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str1 = @"a, b, c, d";
        NSArray *strArray = [str1 componentsSeparatedByString:@", "];
        for( NSString *str in strArray )
        {
            NSLog(@"str = %@", str);
        }
    }
    return ;
}
           

10. 字符串截取

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str = @"0123456789";
        NSRange range = NSMakeRange(, );
        NSString *str1 = [str substringWithRange:range];
        NSLog(@"str1 = %@", str1);
        NSString *str2 = [str substringFromIndex:];
        NSLog(@"str2 = %@", str2);
        NSString *str3 = [str substringToIndex:];
        NSLog(@"str3 = %@", str3);
    }
    return ;
}
           

11. 字符串拆分

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str = @"0123456789";
        for (int i = ; i < [str length]; i++)
        {
            NSLog(@"%c", [str characterAtIndex:i]);
        }
    }
    return ;
}
           

12. 字符串查找

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str = @"ab cd ef cd gh ijk";
        NSRange range = [str rangeOfString:@"cd"];
        NSLog(@"range.location:%ld range.length:%ld", range.location, range.length);        
    }
    return ;
}
           

13. 字符串替换

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str = @"hello there, hello here";
        NSString *str1 = [str stringByReplacingCharactersInRange:NSMakeRange(, ) withString:@"你好"];
        NSLog(@"str1 = %@", str1);
        NSString *str2 = [str stringByReplacingOccurrencesOfString:@"hello" withString:@"你好"];
        NSLog(@"str2 = %@", str2);
    }
    return ;
}
           

14. 读取文件

使用 NSURL 路径类读取网络和本地文件

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str = @"http://blog.csdn.net/username";
        NSURL *httpURL = [NSURL URLWithString:str];
        NSURL *fileURL = [NSURL fileURLWithPath:str];
        NSString *httpStr = [NSString stringWithContentsOfURL:httpURL encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"httpStr = %@", httpStr);
        NSString *fileStr = [NSString stringWithContentsOfFile:@"/Users/username/Documents/test.txt" encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"fileStr = %@", fileStr);
    }
    return ;
}
           

15. 写入文件

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str = @"write file";
        BOOL rtn = [str writeToURL:@"/Users/username/Documents/demo.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
        if (rtn)
            NSLog(@"write success");
        else
            NSLog(@"write fail");
    }
    return ;
}
           

2. NSMutableString 可变字符串

可变字符串是字符串类的子类,因此,字符串类的方法可以用于可变字符串,反之则不行。

1. 追加字符串

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableString *str = [[NSMutableString alloc] initWithCapacity:];
        [str setString:@"hello"];
        [str appendString:@" world"];
        int a = ;
        [str appendFormat:@" %d", a];
        NSLog(@"str = %@", str);
    }
    return ;
}
           

2. 替换字符串

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableString *str = [[NSMutableString alloc] initWithCapacity:];
        [str setString:@"hello world"];
        NSRange range = [str rangeOfString:@"world"];
        [str replaceCharactersInRange:range withString:@"iOS"];
        NSLog(@"str = %@", str);
    }
    return ;
}
           

3. 插入字符串

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableString *str = [[NSMutableString alloc] initWithCapacity:];
        [str setString:@"hello world"];
        [str insertString:@"a " atIndex:];
        NSLog(@"str = %@", str);
    }
    return ;
}
           

4. 删除字符串

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableString *str = [[NSMutableString alloc] initWithCapacity:];
        [str setString:@"hello world"];
        NSRange range = [str rangeOfString:@"ello"];
        [str deleteCharactersInRange:range];
        NSLog(@"str = %@", str);
    }
    return ;
}
           

2. 数组

数组元素只能是对象

同一个数组可以存储不同类型的对象

内存空间依然连续

不论是什么对象,数组元素都是一个指针

1. NSArray

1. 基本操作

  1. 数组初始化
  2. 数组长度
  3. 数组元素判断
  4. 数组最后一个元素
  5. 数组第一个元素
  6. 数组元素查找
  7. 数组元素位置
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSArray *array = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
        int count = (int) array.count;
        NSLog(@"count = %d", count);
        BOOL ishas = [array containsObject:@"2"];
        if (ishas)
        {
            NSLog(@"contain");
        }
        else
        {
            NSLog(@"not contain");
        }
        NSString *str = [array lastObject];
        NSLog(@"str = %@", str);
        str = [array firstObject];
        NSLog(@"str = %@", str);
        str = [array objectAtIndex:];
        NSLog(@"str = %@", str);
        int index = (int) [array indexOfObject:@"3"];
        NSLog(@"index = %d", index);
    }
    return ;
}
           

2. 数组的遍历

  1. for 循环
  2. for in 快速枚举(需要数组元素类型一致)
  3. 枚举器(迭代器)
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSArray *array = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
        for (int i = ; i < array.count; i++)
        {
            NSString *str1 = [array objectAtIndex:i];
            NSLog(@"array[%d] = %@", i, str1);
        }
        for (NSString *str2 in array)
        {
            NSLog(@"array = %@", str2);
        }
        NSEnumerator *enumerator;
        enumerator = [array objectEnumerator];
        id thing;
        while (thing = [enumerator nextObject]) {
            NSLog(@"%@",thing);
        }
    }
    return ;
}
           

2. Multable Array 可变数组

1. 添加和删除

addObject

addObjectsFromArray

removeAllObjects

removeLastObject

removeOjbect

removeOjbectAtIndex

2. 交换数组元素位置

exchangeObjectAtIndex:(NSUInteger) withObjectAtIndex:(NSUInteger)

3. 字典

1. NSDictionary

存储内存空间不连续

使用键(key)值(value)对(KVC, key value coding, 键值编码)

注意

  1. 添加或删除数组或字典的元素时,count 会随之变化
  2. 对象释放后,每个值都会 release
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"1" forKey:@"a"];
        NSLog(@"dict1 = %@", dict1);
        NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"1", @"2", @"3", nil] forKeys:[NSArray arrayWithObjects:@"a", @"b", @"c", nil]];
        NSLog(@"dict2 = %@", dict2);
        NSDictionary *dict3 = @{@"a":@"1", @"b":@"2", @"c":@"3"};
        NSLog(@"dict3 = %@", dict3);
        int count = (int)[dict2 count];
        NSLog(@"count = %d", count);
        NSString *value1 = [dict2 valueForKey:@"b"];
        NSLog(@"value1 = %@", value1);
        NSString *value2 = [dict2 objectForKey:@"b"];
        NSLog(@"value2 = %@", value2);
        NSArray *allValues = [dict2 allValues];
        NSLog(@"allValues = %@", allValues);
        NSArray *allKeys = [dict2 allKeys];
        NSLog(@"allKeys = %@", allKeys);
        NSArray *array = [dict2 objectsForKeys:[NSArray arrayWithObjects:@"a", @"b", @"d", nil] notFoundMarker:@"not found"];
        NSLog(@"array = %@", array);
        for (NSString *key in dict2)
        {
            NSLog(@"%@ = %@", key, [dict2 objectForKey:key]);
        }
        NSEnumerator *en = [dict2 keyEnumerator];
        id key = nil;
        while (key = [en nextObject]) {
            NSLog(@"key = %@", key);
        }
    }
    return ;
}
           

2. NSMutbaleDictionary

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
        [dict setObject:@"1" forKey:@"a"];
        [dict setObject:@"2" forKey:@"b"];
        [dict setObject:@"3" forKey:@"c"];
        [dict setObject:@"4" forKey:@"d"];
        NSLog(@"dict = %@", dict);
        [dict removeObjectForKey:@"a"];
        NSLog(@"dict = %@", dict);
        [dict removeObjectsForKeys:[NSArray arrayWithObjects:@"b", @"d", nil]];
        NSLog(@"dict = %@", dict);
        [dict removeAllObjects];
        NSLog(@"dict = %@", dict);
    }
    return ;
}
           

2. 参考

iOS 基础入门之 Foundation 框架初体验