小编Has*_*din的帖子

下载多个文件时,为什么NSURLSession比cURL慢?

我一直在使用cURL我的iOS应用程序下载大约1700+个文件 - 总共大约~290MB.我的Internet连接大约需要5-7分钟才能下载所有这些内容cURL.但由于不是每个人都有快速的互联网连接(特别是在旅途中),我决定允许在后台下载文件,以便用户在等待下载完成时可以做其他事情.这是NSURLSession进来的地方.

使用时NSURLSession,我的互联网连接需要大约20多分钟才能在应用程序处于前台时下载所有这些内容.当应用程序处于后台时,我不介意它很慢,因为我知道由操作系统来安排下载.但即使它在前景中它很慢也是一个问题.这是预期的行为吗?是因为文件的数量?

如果我没有NSURLSession正确使用,这里有一个我如何使用它的片段:

// Initialization

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"<my-identifier>"];
sessionConfiguration.HTTPMaximumConnectionsPerHost = 40;

backgroundSession = [NSURLSession sessionWithConfiguration:sessionConfiguration
                                                  delegate:self
                                             delegateQueue:nil];

// ...

// Creating the tasks and starting the download
for (int i = 0; i < 20 && queuedRequests.count > 0; i++) {
    NSDictionary *requestInfo = [queuedRequests lastObject];
    NSURLSessionDownloadTask *downloadTask = [backgroundSession downloadTaskWithURL:[NSURL URLWithString:requestInfo[@"url"]]];
    ongoingRequests[@(downloadTask.taskIdentifier)] = requestInfo;
    [downloadTask resume];
    [queuedRequests removeLastObject];
    NSLog(@"Begin download file %d/%d: %@", …
Run Code Online (Sandbox Code Playgroud)

ios nsurlsession

17
推荐指数
1
解决办法
3454
查看次数

将值附加到元组

我有一个元组:

std::tuple<int, std::string, bool> foo = { 10, "Hello, world!", false };
Run Code Online (Sandbox Code Playgroud)

我有一个类型的单个变量:

MyClass bar;
Run Code Online (Sandbox Code Playgroud)

我应该如何编写一个将一个值(或者甚至多个值,如果可能的话)附加到一个新元组中的泛型函数?

std::tuple<int, std::string, bool, MyClass> fooBar = tuple_append(foo, bar);
                                                     ^^^^^^^^^^^^
                                            // I need this magical function!
Run Code Online (Sandbox Code Playgroud)

c++11

11
推荐指数
2
解决办法
8150
查看次数

使用iOS工具链进行CMake:找不到线程

我正在尝试使用ios-cmake生成针对iOS的Xcode项目.但是,它找不到Threads.这是一个简单的CMake脚本用于演示:

CMAKE_MINIMUM_REQUIRED (VERSION 2.8)
PROJECT (MyCITest)

SET (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")

########################
# EDIT: I've also tried adding the lines below prior to posting this question, 
# but there doesn't seem to be any effect.
# (http://stackoverflow.com/questions/8386897)

SET (CMAKE_REQUIRED_INCLUDES ${CMAKE_IOS_SDK_ROOT}/usr ${CMAKE_IOS_SDK_ROOT}/usr/include)
SET (CMAKE_CXX_FLAGS "--sysroot=${CMAKE_IOS_SDK_ROOT} ${CMAKE_CXX_FLAGS}")
SET (CMAKE_C_FLAGS "--sysroot=${CMAKE_IOS_SDK_ROOT} ${CMAKE_C_FLAGS}")

########################

FIND_PACKAGE (ZLIB REQUIRED)
FIND_PACKAGE (LibXml2 REQUIRED)
FIND_PACKAGE (Threads REQUIRED)
Run Code Online (Sandbox Code Playgroud)

从终端运行CMake:

cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/iOS.cmake -GXcode
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

-- Toolchain using default iOS SDK: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk
-- Found ZLIB: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/libz.dylib (found version "1.2.5") 
-- …
Run Code Online (Sandbox Code Playgroud)

cmake ios

6
推荐指数
2
解决办法
4475
查看次数

标签 统计

ios ×2

c++11 ×1

cmake ×1

nsurlsession ×1