免费开源的iOS开发学习平台

NSURL类基本使用

NSURL类提供在应用中使用URL地址的相关方法。例如,给出链接到互联网上的一个文件路径的HTTP地址,然后调用其他类的方法就可以读取到这些文件的内容。另外,在Foundation框架中,有很多方法都是使用NSURL对象作为参数的。

创建NSURL对象

虽然我们看到的网络地址是以字符串形式展示的,但NSURL对象并不是一个字符串,例如@“http://www.99ios.com”。在NSURL类中提供了URLWithString:方法,可以把一个字符串转化成为一个NSURL对象。除此之外,我们还可以使用initWithString:方法。如下所示:

+ (nullable instancetype)URLWithString:(NSString *)URLString;
- (nullable instancetype)initWithString:(NSString *)URLString;

获取输出

由于NSURL对象保存的是一个地址,因此可以获取NSURL对象对应链接中存储的内容,NSURL对象通常作为方法的参数存在。在Foundation框架中,NSString类、NSArray类、NSDictionary类以及NSData类等,都有一些方法可以获取某个NSURL对象对应的内容。

  • 根据NSURL存储的地址,获取NSString类的对象
+ (nullable instancetype)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;

示例代码中,创建一个NSURL对象,并且指向一个网络地址,通过调用NSString类的stringWithContentsOfURL:encoding:error:可以获取NSURL对象指向地址中存储的数据,并转换成字符串形式。如下所示,我们得到的结果是该网址的html源码。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSURL *url = [NSURL URLWithString:@"http://www.99ios.com"];
        NSString *stringContent = [NSString stringWithContentsOfURL:url
                                                           encoding: NSUTF8StringEncoding
                                                              error:nil];
        NSLog(@"the string content of 99ios.com %@",stringContent);
    }
    return 0;
}

运行结果:

  • 获取NSData类的输出内容更加通用一些,例如可以通过网址获取一张图片的二进制数据,然后再转换成UIImage对象
+ (nullable instancetype)dataWithContentsOfURL:(NSURL *)url;

下方的示例代码中,我们访问同样的NSURL对象,但返回NSData类的对象,通过打印出的日志可以看到,返回的内容是以二进制编码形式存储的。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSURL *url = [NSURL URLWithString:@"http://www.99ios.com"];
        NSData *dataContent = [NSData dataWithContentsOfURL:url];
        NSLog(@"the data content of 99ios.com %@", dataContent);
    }
    return 0;
}

运行结果:

示例代码

https://github.com/99ios/4.8