欧美人两个人激情的免费视频_国产亚洲人成网站在线观看不卡_直接看毛片_免费乱理伦片在线观看app

十三年專注于網站建設與互聯網應用開發,低調、有情懷的網絡應用服務商!
南昌百恒科技微信公眾號 掃一掃關注
tel-icon全國服務熱線:400-680-9298,0791-88117053
掃一掃關注百恒科技微信公眾號

IOS開發之資源文件的延遲加載方法

百恒 2017-09-11 15:41:17 3525
? ? ? ?延遲加載指一些對象不是在應用和視圖等初始化時創建,而是在用到它的時候創建。當應用中有一些對象并不經常使用時,延遲加載可以提高程序性能。 ?
? ? ? ?首先,我們要考慮的就是對資源文件的延遲加載。由于資源文件的訪問涉及IO操作,這本身就會耗費一定的 CPU時間,如果文件比較大而且加載時機又不合適,就會造成內存浪費。無論是什么類型的文件,有些情況下采用延遲加載是很有必要的。?
如圖1所示的需求,南昌APP開發公司小編認為可以使用分屏控件(UIPageControl)左右滑動屏幕來瀏覽這3張圖片。

圖1 圖片延遲加載實例?

? ? ? ?PageControlNavigation實例是沒有采用延遲加載的實現代碼,其中的ViewController代碼如下:?
? ? ? ?class ViewController: UIViewController, UIScrollViewDelegate {?
? ? ? ?var page1 : UIImageView! ??
? ? ? ?var page2 : UIImageView! ? ??
? ? ? ?var page3 : UIImageView!?

? ? ? ?@IBOutlet weak var scrollView: UIScrollView! ? ?
? ? ? ?@IBOutlet weak var pageControl: UIPageControl!?

? ? ? ?override func viewDidLoad() { ? ? ? ??
? ? ? ?super.viewDidLoad() ? ? ? ? ? ? ? ? ?
? ? ? ?self.scrollView.delegate = self ? ? ? ? ? ? ? ? ?
? ? ? ?self.scrollView.contentSize ? ? ? ? ? ? ?
? ? ? ?= CGSizeMake(self.view.frame.size.width*3, self.scrollView. ? ? ? ? ? ??
? ? ? ?frame.size.height) ? ? ? ??
? ? ? ?self.scrollView.frame = self.view.frame ? ? ? ? ? ? ? ? ?
? ? ? ?var mainStoryboard = self.storyboard! ? ? ? ? ? ? ? ? ?
? ? ? ?self.page1 = UIImageView(image: UIImage(named: "達芬奇-蒙娜麗莎.png")) ? ? ? ?
? ? ? ?self.page1.frame = CGRectMake(0.0, 0.0, 320.0, 480.0) ? ? ? ? ??
? ? ? ?self.page2 = UIImageView(image: UIImage(named: "羅丹-思想者.png")) ? ? ? ??
? ? ? ?self.page2.frame = CGRectMake(320.0, 0.0, 320.0, 480.0) ? ? ? ? ? ? ? ? ?
? ? ? ?self.page3 = UIImageView(image: UIImage(named: "保羅克利-肖像.png")) ? ? ? ?
? ? ? ?self.page3.frame = CGRectMake(2 * 320.0, 0.0, 320.0, 480.0) ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?self.scrollView.addSubview(page1) ? ? ? ??
? ?
? ? ? ?self.scrollView.addSubview(page2) ? ? ? ??

? ? ? ?self.scrollView.addSubview(page3)

? ? ? ?#import "ViewController.h" ?
? ? ? ?@interface ViewController () ?
? ? ? ?@property (strong, nonatomic) UIImageView *page1;?
? ? ? ?@property (strong, nonatomic) UIImageView *page2;?
? ? ? ?@property (strong, nonatomic) UIImageView *page3; ?
? ? ? ?@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;?
? ? ? ?@property (weak, nonatomic) IBOutlet UIPageControl *pageControl; ?
? ? ? ?- (IBAction)changePage:(id)sender; ?
? ? ? ?@end ?
? ? ? ?@implementation ViewController ?
? ? ? ?- (void)viewDidLoad?

? ? ? ?{ ? ??

? ? ? ? [

? ? ? ?super viewDidLoad]; ? ? ? ? ?
? ? ? ?self.scrollView.delegate = self; ? ? ? ??
? ? ? ?self.scrollView.contentSize ? ? ? ? ??
? ? ? ?= CGSizeMake(self.view.frame.size.width*3, ? ? ?
? ? ? ?self.scrollView.frame.size.height); ? ??
? ? ? ?self.scrollView.frame = self.view.frame; ? ? ? ? ? ? ?

? ? ? ?self.page1 = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, ? ? ? ? ?

? ? ? ?self.view.frame.size.width, self.view.frame.size.height)]; ? ??

? ? ? ?self.page1.image = [UIImage imageNamed:@"達芬奇-蒙娜麗莎.png"]; ? ? ? ? ?

? ? ? ?self.page2 = [[UIImageView alloc] initWithFrame:CGRectMake(320.0f, 0.0f, ? ? ? ??

? ? ? ?self.view.frame.size.width, self.view.frame.size.height)]; ? ?

? ? ? ?self.page2.image = [UIImage imageNamed:@"羅丹-思想者.png"];?

? ? ? ?} ?
? ? ? ?override func didReceiveMemoryWarning() { ? ? ? ??
? ? ? ?super.didReceiveMemoryWarning() ? ??
? ? ? ?} ?
? ??
? ? ? ?func scrollViewDidScroll(scrollView: UIScrollView) { ? ? ? ??
? ? ? ?var offset = scrollView.contentOffset ? ? ? ??
? ? ? ?self.pageControl.currentPage = Int(offset.x) / 320 ? ??
? ? ? ?} ? ? ? ? ?
? ? ? ?@IBAction func changePage(sender: AnyObject) { ? ? ? ??
? ? ? ?UIView.animateWithDuration(0.3,animations : { ? ? ? ? ? ??
? ? ? ?var whichPage = self.pageControl.currentPage ? ? ? ? ? ??
? ? ? ?self.scrollView.contentOffset = CGPointMake ? ? ? ? ? ? ? ??
? ? ? ?(320 * CGFloat(whichPage), 0) ? ? ? ??
? ? ? ?}) ? ?
? ? ? ?}?
? ? ? ?}?

? ? ? ?self.page3 = [[UIImageView alloc] initWithFrame:CGRectMake(2 * 320.0f, 0.0f, ? ? ? ??

? ? ? ?self.view.frame.size.width, self.view.frame.size.height)]; ? ??

? ? ? ?self.page3.image = [UIImage imageNamed:@"保羅克利-肖像.png"]; ? ? ? ? ?
? ? ? ?[self.scrollView addSubview:self.page1]; ? ??
? ? ? ?[self.scrollView addSubview:self.page2]; ? ??
? ? ? ?[self.scrollView addSubview:self.page3];?
? ? ? ?} ?
?
? ? ? ?- (void) scrollViewDidScroll: (UIScrollView *) aScrollView?
? ? ? ?{ ? ??
? ? ? ?CGPoint offset = aScrollView.contentOffset; ? ??
? ? ? ?self.pageControl.currentPage = offset.x / 320.0f;?
? ? ? ?} ??
? ? ? ?- (void)didReceiveMemoryWarning?
? ? ? ?{ ? ??
? ? ? ?[super didReceiveMemoryWarning];?
? ? ? ?} ?
? ? ? ?#pragma mark - ?
? ? ? ?#pragma mark PageControl stuff?
? ? ? ?- (IBAction)changePage:(id)sender?
? ? ? ?{ ? ??
? ? ? ?[UIView animateWithDuration:0.3f animations:^{ ? ? ? ??
? ? ? ?NSInteger whichPage = self.pageControl.currentPage; ? ? ? ??
? ? ? ?self.scrollView.contentOffset = CGPointMake(320.0f * whichPage, 0.0f); ? ?
? ? ? ?}];?
? ? ? ?} ?
? ? ? ?@end

? ? ? ?我們是在viewDidLoad方法中一次加載全部3張圖片,但是有的時候用戶不一定會瀏覽后面的圖片,他可能只看 到第一張或第二張,后面的第三張沒有去看,此時后面的兩張圖片仍然加載內存的話,會造成內存浪費。?

? ? ? ?這時候我們就可以采用資源文件的延遲加載功能,采用延遲加載實現時,ViewController的代碼如下:?

? ? ? ?class ViewController: UIViewController, UIScrollViewDelegate { ?
? ? ? ?var page1 : UIImageView! ? ??
? ? ? ?var page2 : UIImageView! ? ??
? ? ? ?var page3 : UIImageView! ? ? ? ? ?
? ? ? ?@IBOutlet weak var scrollView: UIScrollView! ? ??
? ? ? ?@IBOutlet weak var pageControl: UIPageControl! ? ? ? ? ?

? ? ? ?override func viewDidLoad() { ? ? ? ??
? ? ? ?super.viewDidLoad() ? ? ? ? ? ? ? ? ?
? ? ? ?self.scrollView.delegate = self ?
? ? ? ? ? ? ? ??
? ? ? ?self.scrollView.contentSize ? ? ? ? ? ? ??
? ? ? ?= CGSizeMake(self.view.frame.size.width*3, self.scrollView. ? ? ? ? ? ??
? ? ? ?frame.size.height) ? ? ? ??
? ? ? ?self.scrollView.frame = self.view.frame ? ? ? ? ? ? ? ? ?
? ? ? ?var mainStoryboard = self.storyboard! ? ? ? ? ? ? ? ? ?
? ? ? ?self.page1 = UIImageView(image: UIImage(named: ? ? ? ? ? ??
? ? ? ?"達芬奇-蒙娜麗莎.png")) ? ? ? ? ? ? ? ? ? ? ? ?① ? ? ? ?

? ? ? ?self.page1.frame = CGRectMake(0.0, 0.0, 320.0, 480.0) ? ? ? ? ? ? ? ? ?

? ? ? ?self.scrollView.addSubview(page1) ? ? ? ? ? ? ?

? ? ? ?}?

? ? ? ?#import "ViewController.h" ?
? ? ? ?@interface ViewController () ?
? ? ? ?@property (strong, nonatomic) UIImageView *page1;?
? ? ? ?@property (strong, nonatomic) UIImageView *page2;?
? ? ? ?@property (strong, nonatomic) UIImageView *page3;?
?
? ? ? ?@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;?
? ? ? ?@property (weak, nonatomic) IBOutlet UIPageControl *pageControl; ?

? ? ? ?- (IBAction)changePage:(id)sender; ?
? ? ? ?-(void)loadImage:(NSInteger)nextPage; ?
? ? ? ?@end ?

? ? ? ?@implementation ViewController ?
? ? ? ?- (void)viewDidLoad?
? ? ? ?{ ? ??
? ? ? ?[super viewDidLoad]; ? ? ? ? ?
? ? ? ?self.scrollView.delegate = self; ? ? ? ? ?

? ? ? ?self.scrollView.contentSize ?= CGSizeMake(self.view.frame.size.width*3, ? ? ? ??

? ? ? ?self.scrollView.frame.size.height); ? ?

? ? ? ?self.scrollView.frame = self.view.frame;?

? ? ? ?override func didReceiveMemoryWarning() { ? ? ? ??
? ? ? ?super.didReceiveMemoryWarning() ? ??
? ? ? ?} ?
? ? ? ?func scrollViewDidScroll(scrollView: UIScrollView) { ? ? ? ??
? ? ? ?var offset = scrollView.contentOffset ? ? ? ??
? ? ? ?self.pageControl.currentPage = Int(offset.x) / 320 ? ? ? ? ? ? ? ? ?
? ? ? ?self.loadImage(self.pageControl.currentPage + 1) ? ? ? ? ? ? ?
? ? ? ?} ? ? ? ? ?
? ? ? ?@IBAction func changePage(sender: AnyObject) { ? ? ? ??
? ? ? ?UIView.animateWithDuration(0.3,animations : { ? ? ? ? ? ??
? ? ? ?var whichPage = self.pageControl.currentPage ? ? ? ? ? ??
? ? ? ?self.scrollView.contentOffset = CGPointMake ? ? ? ? ? ? ? ??
? ? ? ?(320 * CGFloat(whichPage), 0) ? ? ? ? ? ??
? ? ? ?self.loadImage(self.pageControl.currentPage + 1) ? ? ? ??
? ? ? ?}) ? ??
? ? ? ?} ? ? ? ? ?
? ? ? ?func loadImage(nextPage: Int) { ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ?if nextPage == 1 && self.page2 == nil { ? ? ? ? ? ??
? ? ? ?self.page2 = UIImageView(image: UIImage(named: "羅丹-思想者.png")) ? ? ? ? ? ??
? ? ? ?self.page2.frame = CGRectMake(320.0, 0.0, 320.0, 480.0) ? ? ? ? ? ??
? ? ? ?self.scrollView.addSubview(page2) ? ? ? ??
? ? ? ?} ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ?if nextPage == 2 && self.page3 == nil { ? ? ? ? ? ??

? ? ? ?self.page3 = UIImageView(image: UIImage(named: "保羅克利-肖像.png")) ? ? ? ? ? ? ? ?

? ? ? ?self.page3.frame = CGRectMake(2 * 320.0, 0.0, 320.0, 480.0) ? ? ? ? ? ??

? ? ? ?self.scrollView.addSubview(page3) ? ? ? ??

? ? ? ?} ? ?
? ? ? ?}?
? ? ? ?}?

? ? ? ?self.page1 = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, ? ? ? ? ?

? ? ? ?self.view.frame.size.width, self.view.frame.size.height)]; ? ??

? ? ? ?self.page1.image = [UIImage imageNamed:@"達芬奇-蒙娜麗莎.png"]; ? ? ? ?① ? ? ? ?

? ? ? ?[self.scrollView addSubview:self.page1];?

? ? ? ?} ?
? ? ? ?- (void) scrollViewDidScroll: (UIScrollView *) aScrollView?
? ? ? ?{ ? ??
? ? ? ?CGPoint offset = aScrollView.contentOffset; ? ??
? ? ? ?self.pageControl.currentPage = offset.x / 320.0f; ? ??
? ? ? ?[self loadImage:self.pageControl.currentPage + 1];?
? ? ? ?} ?
? ? ? ?- (void)didReceiveMemoryWarning?
? ? ? ?{ ? ??
? ? ? ?[super didReceiveMemoryWarning];?
? ? ? ?} ?
? ? ? ?#pragma mark - ?
? ? ? ?#pragma mark PageControl stuff?
? ? ? ?- (IBAction)changePage:(id)sender?
? ? ? ?{ ? ??
? ? ? ?[UIView animateWithDuration:0.3f animations:^{ ? ? ? ??
? ? ? ?NSInteger whichPage = self.pageControl.currentPage; ? ? ? ??
? ? ? ?self.scrollView.contentOffset = CGPointMake(320.0f * whichPage, 0.0f); ? ? ? ?
? ? ? ?[self loadImage:self.pageControl.currentPage + 1]; ? ??
? ? ? ?}];?
? ? ? ?} ?
? ? ? ?-(void)loadImage:(NSInteger)nextPage?
? ? ? ?{ ? ??
? ? ? ?if (nextPage == 1 && self.page2 == nil) { ? ? ? ??

? ? ? ?self.page2 = [[UIImageView alloc] initWithFrame:CGRectMake(320.0f, 0.0f, ? ? ? ? ? ?

? ? ? ?self.view.frame.size.width, self.view.frame.size.height)]; ? ? ? ??

? ? ? ?self.page2.image = [UIImage imageNamed:@"羅丹-思想者.png"]; ? ? ? ??
? ? ? ?[self.scrollView addSubview:self.page2]; ? ?
? ? ? ?} ? ? ? ? ?
? ? ? ?if (nextPage == 2 && self.page3 == nil) { ? ? ? ??

? ? ? ?self.page3 = [[UIImageView alloc] initWithFrame:CGRectMake(2 * 320.0f, 0.0f, ? ? ? ? ? ??

? ? ? ?self.view.frame.size.width, self.view.frame.size.height)]; ? ? ? ??

? ? ? ?self.page3.image = [UIImage imageNamed:@"保羅克利-肖像.png"]; ? ? ? ??
? ? ? ?[self.scrollView addSubview:self.page3]; ? ??
? ? ? ?} ? ??
? ? ? ?} ?
? ? ? ?@end?

? ? ? ?我們重新修改了這個實例,在viewDidLoad方法中只加載第一張圖片,見第①行代碼。如果用戶滑動屏幕或點 擊分屏控件進入第二個屏幕,則調用loadImage:方法加載第二張圖片,類似地,如果要進入第三個屏幕,則調用 loadImage:方法加載第三張圖片。?
??
? ? ? ?在這兩種實現方式中,LazyLoadPageControlNavigation實現了延遲加載。很顯然,LazyLoadPageControlNavigation 的延遲加載友好很多。那么,兩者究竟有多大的差別,這是可以量化的。通過Instruments工具的Allocations模板,可 以分析ViewController視圖控制器加載時內存占用方面的差別。圖2是無延遲加載實現案例的Allocations模板跟 蹤,圖3是采用延遲加載實現案例的Allocations模板跟蹤。?


圖2 無延遲加載實現案例的Allocations模板跟蹤?

圖3 使用延遲加載實現案例的Allocations模板跟蹤

? ? ? ?如圖2所示,界面啟動用時,內存占用馬上達到8.12MB。如圖3所示,界面啟動用時,內存占用3.08MB, 當我們滑動到第二和第三屏幕時,內存占用達到8.06MB,內存變化會有明顯的兩個階梯。?

? ? ? ?綜上所述,延遲加載的優勢很明顯。如果一定會訪問到資源文件,則延遲加載這些資源文件時,內存占用方面就沒有優勢了,但是在界面加載速度方面還是有優勢的。?
? ? ? ?以上便是南昌APP開發公司-百恒網絡為大家介紹的關于資源文件的延遲加載方法,希望對大家有所幫助!此外,如有需要APP開發、網站建設、微信開發等方面的服務的朋友,歡迎來電和我們聯系,百恒隨時為您服務!
400-680-9298,0791-88117053
掃一掃關注百恒網絡微信公眾號

歡迎您的光顧,我們將竭誠為您服務×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務 售后服務
 
備案專線 備案專線
 
售后服務 售后服務
 
×