带有 uiwebview 的 Gif swift
Gif with uiwebview swift
我制作了一个 UIWebView
来显示 gif,我有 2 个按钮登录和注册。
首先,当我 运行 我的 ram 使用 270mb 然后如果我点击一个按钮转到另一个 viewcontroller (270mb 停留)然后如果我返回,就像它正在加载另一个 gif 并且 ram 上升到 430mb.
我已经测试了 webview.stoploading()
当按钮被点击时
override func viewDidLoad() {
super.viewDidLoad()
let filePath = NSBundle.mainBundle().pathForResource("railway", ofType: "gif")
let gif = NSData(contentsOfFile: filePath!)
webview.loadData(gif!, MIMEType: "image/gif", textEncodingName: String(), baseURL: NSURL())
webview.userInteractionEnabled = false; }
@IBAction func login(sender: AnyObject) {
webview.stopLoading()
}
尝试使用 cache policy:
加载您的内容
enum NSURLRequestCachePolicy : UInt {
case UseProtocolCachePolicy
case ReloadIgnoringLocalCacheData
case ReloadIgnoringLocalAndRemoteCacheData
static var ReloadIgnoringCacheData: NSURLRequestCachePolicy { get }
case ReturnCacheDataElseLoad
case ReturnCacheDataDontLoad
case ReloadRevalidatingCacheData }
所以你的代码可以是:
let filePath = NSBundle.mainBundle().pathForResource("railway", ofType: "gif")
var requestURL = NSURL(string:filePath!);
var request = NSMutableURLRequest(URL: requestURL!,
cachePolicy: .ReturnCacheDataElseLoad,
timeoutInterval: 15.0)
webview.loadRequest(request)
你也可以处理 NSURLCache 内存:
override func viewDidLoad() {
super.viewDidLoad()
let cacheSizeMemory = 8*1024*1024; // 8MB
let cacheSizeDisk = 32*1024*1024; // 32MB
let sharedCache = NSURLCache.init(
memoryCapacity:cacheSizeMemory,
diskCapacity:cacheSizeDisk,
diskPath: "nsurlcache"
)
NSURLCache.setSharedURLCache(sharedCache)
}
override func didReceiveMemoryWarning() {
print("Received memory warning")
NSURLCache.sharedURLCache().removeAllCachedResponses()
super.didReceiveMemoryWarning()
}
您可以对您的项目做的另一件事是使用如下代码缓存您的对象:
let cache = NSCache()
let myGiantObject: GiantObjectClass
if let cachedVersion = cache.objectForKey("GiantObjectClassCached") as? GiantObjectClass {
// use the cached version
myGiantObject = cachedVersion
} else {
// create it from the original constructors then store in the cache
myGiantObject = GiantObjectClass()
cache.setObject(myObject, forKey: "GiantObjectClassCached")
}
好的,我找到了!!!!
当我拖放连接(从登录按钮到登录视图)时,我必须将其设置为推送(我将其设置为显示)现在我使用 97mb ram,进入登录视图时使用 130mb,返回时使用 97mb。
首先,我现在使用视频,但我相信它是一样的,因为问题是一样的
其次,如果有人想尝试它,他必须使用导航控制器嵌入控制器(如果你想要,你可以将栏隐藏到第一个视图),然后你将通过推送从按钮拖动到第二个视图(而不是它的导航控制器)
我制作了一个 UIWebView
来显示 gif,我有 2 个按钮登录和注册。
首先,当我 运行 我的 ram 使用 270mb 然后如果我点击一个按钮转到另一个 viewcontroller (270mb 停留)然后如果我返回,就像它正在加载另一个 gif 并且 ram 上升到 430mb.
我已经测试了 webview.stoploading()
当按钮被点击时
override func viewDidLoad() {
super.viewDidLoad()
let filePath = NSBundle.mainBundle().pathForResource("railway", ofType: "gif")
let gif = NSData(contentsOfFile: filePath!)
webview.loadData(gif!, MIMEType: "image/gif", textEncodingName: String(), baseURL: NSURL())
webview.userInteractionEnabled = false; }
@IBAction func login(sender: AnyObject) {
webview.stopLoading()
}
尝试使用 cache policy:
加载您的内容enum NSURLRequestCachePolicy : UInt { case UseProtocolCachePolicy case ReloadIgnoringLocalCacheData case ReloadIgnoringLocalAndRemoteCacheData static var ReloadIgnoringCacheData: NSURLRequestCachePolicy { get } case ReturnCacheDataElseLoad case ReturnCacheDataDontLoad case ReloadRevalidatingCacheData }
所以你的代码可以是:
let filePath = NSBundle.mainBundle().pathForResource("railway", ofType: "gif")
var requestURL = NSURL(string:filePath!);
var request = NSMutableURLRequest(URL: requestURL!,
cachePolicy: .ReturnCacheDataElseLoad,
timeoutInterval: 15.0)
webview.loadRequest(request)
你也可以处理 NSURLCache 内存:
override func viewDidLoad() {
super.viewDidLoad()
let cacheSizeMemory = 8*1024*1024; // 8MB
let cacheSizeDisk = 32*1024*1024; // 32MB
let sharedCache = NSURLCache.init(
memoryCapacity:cacheSizeMemory,
diskCapacity:cacheSizeDisk,
diskPath: "nsurlcache"
)
NSURLCache.setSharedURLCache(sharedCache)
}
override func didReceiveMemoryWarning() {
print("Received memory warning")
NSURLCache.sharedURLCache().removeAllCachedResponses()
super.didReceiveMemoryWarning()
}
您可以对您的项目做的另一件事是使用如下代码缓存您的对象:
let cache = NSCache()
let myGiantObject: GiantObjectClass
if let cachedVersion = cache.objectForKey("GiantObjectClassCached") as? GiantObjectClass {
// use the cached version
myGiantObject = cachedVersion
} else {
// create it from the original constructors then store in the cache
myGiantObject = GiantObjectClass()
cache.setObject(myObject, forKey: "GiantObjectClassCached")
}
好的,我找到了!!!! 当我拖放连接(从登录按钮到登录视图)时,我必须将其设置为推送(我将其设置为显示)现在我使用 97mb ram,进入登录视图时使用 130mb,返回时使用 97mb。
首先,我现在使用视频,但我相信它是一样的,因为问题是一样的 其次,如果有人想尝试它,他必须使用导航控制器嵌入控制器(如果你想要,你可以将栏隐藏到第一个视图),然后你将通过推送从按钮拖动到第二个视图(而不是它的导航控制器)