рдЖрдИрдУрдПрд╕ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХреИрд╢рд┐рдВрдЧред NSURLCache

рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╡рд┐рд╖рдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣рд╛рдВ, рд╕рд┐рд╕реНрдЯрдо рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╕рдХреНрд╖рдо рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдмрд╛рддрдЪреАрдд рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

NSURLCache рд░реИрдо рдпрд╛ рдбрд┐рд╕реНрдХ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕рдорд╛рдзрд╛рди рд╣реИред Apple рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, NSURLConnection рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдЕрдиреБрд░реЛрдз рдХреЛ NSURLCache рдорд╛рдзреНрдпрдо рд╕реЗ "рдкрд╛рд░рд┐рдд" рдХрд┐рдпрд╛ NSURLCache ред

рдХреИрд╢рд┐рдВрдЧ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЗрдВрдЯрд░рдиреЗрдЯ рдХреА рдкреВрд░реНрдг рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рджреМрд░рд╛рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдзрд╛рд░рдгрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВред

рд╕рд░реНрд╡рд░ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕рдХреА рдПрдХ рдХреЙрдкреА рд▓реЛрдХрд▓ рдХреИрд╢ рдореЗрдВ рд╕реЗрд╡ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП рдмрд┐рдирд╛, рддреБрд░рдВрдд рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред NSURLCache рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреИрд╢реНрдб рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛ред

NSURLCache рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NSURLCache рдЖрдкрдХреЛ sharedURLCache рдкрд░ sharedURLCache рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА sharedURLCache ред рдпрд╣ application:didFinishLaunchingWithOptions: рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ application:didFinishLaunchingWithOptions: iOS рдкрд░ рдпрд╛ applicationDidFinishLaunching: рдореЗрдВ рд╡рд┐рдзрд┐ application:didFinishLaunchingWithOptions: applicationDidFinishLaunching: - Mac OS X рдкрд░:

 -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil]; [NSURLCache setSharedURLCache:URLCache]; } 

рдЖрдк рдХреИрд╢ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ - рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдФрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рджреЛрдиреЛрдВ рдкрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдПрдХ рдмреБрджреНрдзрд┐рдорд╛рди рд╡рд┐рдХрд▓реНрдк рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

NSURLRequestCachePolicy


рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдЕрдиреБрд░реЛрдз рдкрд░, рдХреИрд╢ рдкреЙрд▓рд┐рд╕реА cachePolicy рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА cachePolicy рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХреА рдЧрдИ рд╣реИред рдЖрдк рдирд┐рдореНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ:

рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЕрдХреНрд╕рд░ рднреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВред рди рд╣реА рдпрд╣ рд╕реНрдкрд╖реНрдЯрддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдХрд┐ NSURLRequestReloadIgnoringLocalAndRemoteCacheData рдФрд░ NSURLRequestReloadRevalidatingCacheData рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред

NSURLRequestCachePolicy рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:

HTTP рдХреИрд╢рд┐рдВрдЧ


рдЪреВрдВрдХрд┐ NSURLConnection рд╡рд░реНрдЧ NSURLConnection рд╡рд┐рднрд┐рдиреНрди рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (FTP рдФрд░ HTTP / HTTPS рд╕рд╣рд┐рдд) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреИрд╢рд┐рдВрдЧ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓-рд╕реНрд╡рддрдВрддреНрд░ рддрд░реАрдХреЗ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЗрд╕реЗ HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

HTTP рдореЗрдВ, рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ, рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░, рдХреИрд╢рд┐рдВрдЧ, рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдиреБрд░реЛрдз рд╣реЗрдб

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, NSURLRequest рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╢реНрдб рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рдкрд╕ рдХрд░рдиреА рд╣реИ рдпрд╛ рдирд╣реАрдВред рдмреЗрд╣рддрд░ рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрди рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рд░рд┐рд╕реНрдкрд╛рдВрд╕ рд╣реЗрдбрд░

NSHTTPURLResponse рд╕рд╛рде, рдХреИрд╢рд┐рдВрдЧ рд╣реЗрдбрд░ рднреА рд▓реМрдЯрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

Cache-Control рдЕрд▓рд╛рд╡рд╛, рд╕рд░реНрд╡рд░ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЗрдбрд░ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ (рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдХреЛ рджреЗрдЦреЗрдВ):

NSURLConnectionDelegate


рдЕрдиреБрд░реЛрдз рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, NSURLConnection рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рдкрд╛рд╕ connection:willCacheResponse: рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╢реНрдб рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИ connection:willCacheResponse: рд╡рд┐рдзрд┐ред рдЗрд╕ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ NSCachedURLResponse рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ NSURLResponse рдореЗрдВ рд╕реНрд░реЛрдд NSURLResponse рдФрд░ рдХреИрд╢реНрдб рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NSCachedURLResponse рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ NSCachedURLResponse initWithResponse:data:userInfo:storagePolicy: рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ initWithResponse:data:userInfo:storagePolicy: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 -(NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse { NSMutableDictionary *mutableUserInfo = [[cachedResponse userInfo] mutableCopy]; NSMutableData *mutableData = [[cachedResponse data] mutableCopy]; NSURLCacheStoragePolicy storagePolicy = NSURLCacheStorageAllowedInMemoryOnly; // ... return [[NSCachedURLResponse alloc] initWithResponse:[cachedResponse response] data:mutableData userInfo:mutableUserInfo storagePolicy:storagePolicy]; } 

рдпрджрд┐ connection:willCacheResponse: рд╡рд┐рдзрд┐ рд░рд┐рдЯрд░реНрди nil , рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХреИрд╢ рдирд╣реАрдВ рд╣реЛрдЧреАред

 - (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse { return nil; } 

connection:willCacheResponse: рд╡рд┐рдзрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдпрджрд┐ рдЗрд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ NSCachedURLResponse рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдЖрд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдиреБрдХрд╕рд╛рди


NSURLCache рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:

рдирд┐рд╖реНрдХрд░реНрд╖


NSURLCache рдЙрджрд╛рд╣рд░рдг рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╣рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╕рд┐рд╕реНрдЯрдо рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЬрд╛рдирдирд╛ рдХрд┐рддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреИрд╢рд┐рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдмрд╛рдЗрдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ NSURLCache рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрд░рдВрдн рдореЗрдВ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ 2 рд▓рд╛рдЗрдиреЗрдВ рд▓рдЧрддреА рд╣реИрдВ рдФрд░ рдХрд╛рдо рдХреЛ 100 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдФрд░ рднреА рдиреЗрдЯрд╡рд░реНрдХ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рднрд╛рд░реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдЗрд╖реНрдЯрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдореЗрд╢рд╛ application:didFinishLaunchingWithOptions: рдореЗрдВ NSURLCache рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ application:didFinishLaunchingWithOptions: рд╡рд┐рдзрд┐ред

Source: https://habr.com/ru/post/In179349/


All Articles