您好,欢迎访问代码之道!登录后台查看权限
  • 欢迎大神光临
  • 有朋自远方来 不亦悦乎

Objective-C教程之Foundation框架常用类

ObjC教程 老刘 2018-08-08 890 次浏览 0个评论

Foundation提供了基础功能层,包括数据存储和持久性、文本处理、日期和时间计算、排序和过滤以及网络等等。 Foundation框架一开始是为NeXTStep操作系统而开发的,所以Foundation里面的类型都是以NS为前缀的。

下面列出了一些常用的类。

Foundation框架对C语言数类型进行了拓展,NSDecimal(结构体)、NSDecimalNumber(类)、NSNumber等。

NSNumber是一个类,可以将其他任意基础数据类型进行包装,并可以转换回基础类型。

例:NSNumber创建和转换为基础数据类型

#import <Foundation/Foundation.h>

int main(int argc, const char *argv[]) {
    @autoreleasepool {
        NSNumber *a1 = [NSNumber numberWithBool:YES];
        NSNumber *a2 = [NSNumber numberWithChar:'C'];
        NSNumber *a3 = [NSNumber numberWithInt:-1];
        NSNumber *a4 = [NSNumber numberWithUnsignedChar:(unsigned char)255];
        NSNumber *a5 = [NSNumber numberWithUnsignedInt:520u];
        //...More +alloc-initWithXxx or +numberWithXxx
        NSLog(@"a1-a5=>%@ %@ %@ %@ %@", a1, a2, a3, a4, a5);
        // Accessing numeric value
        NSLog(@"YES=>%u", a1.unsignedIntValue);
        NSLog(@"-1=>%u", a3.unsignedIntValue);
        NSLog(@"520u=>%d", a5.boolValue);
        // ...More .xxxValue
        return 0;
    }
}

/*
程序输出:
2018-08-08 18:19:55.956 Foundation[4449:120050] a1-5=>1 67 -1 255 520
2018-08-08 18:19:55.957 Foundation[4449:120050] YES=>1
2018-08-08 18:19:55.957 Foundation[4449:120050] -1=>4294967295
2018-08-08 18:19:55.957 Foundation[4449:120050] 520u=>1
 */

从例子中可以看出初始化NSNumber的类型和输出类型并没有要求一致。

文本和字符串

NSCharacterSet、NSString、NSScanner等。下面仅仅给出最常用的NSString的使用例子。

例:NSString

#import <Foundation/Foundation.h>

int main(int argc, const char *argv[]) {
    @autoreleasepool {
        NSString *s1 = @"测试字符串1";
        NSLog(@">>%@", s1);
        NSString *s2 = [[NSString alloc]initWithUTF8String:"测试字符串2"];
        NSLog(@">>%@", s2);
        NSString *s3 = [[NSString alloc]initWithCString:"测试字符串3" encoding:NSUTF8StringEncoding];
        NSLog(@">>%@", s3);
        char b1[] = {'a', 'b', 'c'};
        NSString *s4 = [[NSString alloc]initWithBytes:b1  length:sizeof(b1) encoding:NSASCIIStringEncoding];
        NSLog(@">>%@", s4);
        NSString *s5 = [[NSString alloc]initWithFormat:@"a=%d,b=%d",1,2];
        NSLog(@">>%@", s5);
    }
    return 0;
}
/*
程序输出:
2018-08-08 18:24:18.945 Foundation[4504:121292] >>测试字符串1
2018-08-08 18:24:18.946 Foundation[4504:121292] >>测试字符串2
2018-08-08 18:24:18.946 Foundation[4504:121292] >>测试字符串3
2018-08-08 18:24:18.946 Foundation[4504:121292] >>abc
2018-08-08 18:24:18.946 Foundation[4504:121292] >>a=1,b=2
 */

数据存储

NSArray、NSDictionary、NSSet等。

例:NSArray

#include <Foundation/Foundation.h>
// Creating an NSArray
int main(int argc, const char *argv[]) {
    @autoreleasepool {
        // Create an NSArray object using array literal.
        NSArray *a1 = @[@"hello", @123];
        NSLog(@"%@", a1);
#if 0
        // ARC机制下不允许将类对象放到C数组中,否则会得到下面错误
        // Error:(11, 43) implicit conversion of an indirect
        // pointer to an Objective-C pointer to 'id _Nonnull' is disallowed with ARC
        id _a2[] = {@"hello", @123};
        NSArray *a2 = [NSArray arrayWithObjects:_a2, sizeof(_a2) / sizeof(id)];
        NSLog(@"%@", a2);
#endif
        //
        NSArray *a3 = [NSArray arrayWithArray:a1];
        NSLog(@"%@", a3);
        //
        NSArray *a4 = [NSArray arrayWithObjects:@"hello", @123, nil];
        NSLog(@"%@", a4);
        //
        NSArray *a5 = [NSArray arrayWithObject:@"hello"];
        NSLog(@"%@", a5);
    }
    return 0;
}


/*
程序输出:
2018-08-08 18:29:05.226 Foundation[4623:122815] (
    hello,
    123
)
2018-08-08 18:29:05.226 Foundation[4623:122815] (
    hello,
    123
)
2018-08-08 18:29:05.226 Foundation[4623:122815] (
    hello,
    123
)
2018-08-08 18:29:05.226 Foundation[4623:122815] (
    hello
)
 */

日期和时间

NSDate、NSTimeZone、NSCalendar等。

例:日期对象

#import <Foundation/Foundation.h>

int main(int argc, const char *argv[]) {
    @autoreleasepool {
        NSDate *d1 = [[NSDate alloc]init];
        // Initialized to current date an time
        NSLog(@"%@", d1);
        NSDate *d2 = [[NSDate alloc]initWithTimeIntervalSince1970:(NSTimeInterval)time(NULL)];
        NSLog(@"%@", d2);
    }
    return 0;
}
/*
程序输出:
2018-08-08 18:30:15.659 Foundation[4669:123285] 2018-08-08 10:30:15 +0000
2018-08-08 18:30:15.659 Foundation[4669:123285] 2018-08-08 10:30:15 +0000
 */

文件处理

NSFileManager用于处理文件。

URL加载系统

NSURL、NSURLComponents、NSURLQueryItem等用于处理英特网访问。

已有 890 位网友参与,快来吐槽:

发表评论