It's really just a cast, with some range checking:
const long long expectedContentLength = response.expectedContentLength;
NSUInteger expectedSize = 0;
if (NSURLResponseUnknownLength == expectedContentLength) {
assert(0 && "length not known - do something");
return errval;
}
else if (expectedContentLength < 0) {
assert(0 && "too little");
return errval;
}
else if (expectedContentLength > NSUIntegerMax) {
assert(0 && "too much");
return errval;
}
// expectedContentLength can be represented as NSUInteger, so cast it:
expectedSize = (NSUInteger)expectedContentLength;
引用:http://stackoverflow.com/questions/10615950/implicit-conversion-loses-integer-precision-long-long-to-nsinteger-aka-in