在页面中按需初始化 AVAudioPlayer

很多时候我们需要根据页面上内容的情况创建 AVAudioPlayer 对象,已达到降低无谓资源占用等目的。下面我们来看一段代码看起来正确的代码:

override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated) var error: NSError?
let player = AVAudioPlayer(data: NSData(contentsOfURL: NSURL(string: "https://dl.django.t.taobao.com/rest/1.0/file?acl=5222dc2f6b41f20dae409a7743dc04fb&cID=40001&fileIds=ytQkYL66QaOs_6tYGSRHQQAAAA8AAQIC&name=13-1.mp3&timestamp=1426953600&token=5HwHU8ZKQD-kUh3Yw11nZwAAAAAABSZcAAABw60AAAAPAAEB&uID=")!)!, fileTypeHint: "AVFileTypeMPEGLayer3", error: &error)
if let e = error {
println(e.debugDescription)
} else {
player.prepareToPlay()
player.play()
}
}

上面这段代码看起来毫无问题,实际运行以后也是毫无问题,不报错,就是放不出声,非常奇怪。

一步解决奇怪问题

class ViewController: UIViewController {

    var player: AVAudioPlayer!

    override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated) var error: NSError?
player = AVAudioPlayer(data: NSData(contentsOfURL: NSURL(string: "https://dl.django.t.taobao.com/rest/1.0/file?acl=5222dc2f6b41f20dae409a7743dc04fb&cID=40001&fileIds=ytQkYL66QaOs_6tYGSRHQQAAAA8AAQIC&name=13-1.mp3&timestamp=1426953600&token=5HwHU8ZKQD-kUh3Yw11nZwAAAAAABSZcAAABw60AAAAPAAEB&uID=")!)!, fileTypeHint: "AVFileTypeMPEGLayer3", error: &error)
if let e = error {
println(e.debugDescription)
} else {
player.prepareToPlay()
player.play()
}
}
}

在此控制器类的顶部事先声明播放器对象,即可成功播放!这个方法对于播放器对象数组、字典依然有效:

var playerArray = Array<AVAudioPlayer>()
var playerDictionary = Dictionary<Int, AVAudioPlayer>()

不让对象的内存被自动回收掉即可。

 
 
 

AVAudioPlayer 如何在页面呈现之后按需初始化的更多相关文章

  1. 【web性能】页面呈现、重绘、回流

    在讨论页面重绘.回流之前.需要对页面的呈现流程有些了解,页面是怎么把html结合css等显示到浏览器上的,下面的流程图显示了浏览器对页面的呈现的处理流程.可能不同的浏览器略微会有些不同.但基本上都是类 ...

  2. 从输入一个URL到页面呈现,网络上都发生了什么?

    归纳一下其中涉及到前端的一些基础知识,主要包括:http协议.web标准.w3c标准等.       这个问题虽然只有两个2个动作:输入URL和呈现页面,但这背后发生了很多"有趣" ...

  3. AngularJS中页面呈现html代码段

    如何在页面呈现一段html代码段呢? 在textarea中我们这样写: <textarea name="" id="" cols="30&quo ...

  4. 高性能WEB开发:深入理解页面呈现、重绘、回流

    在讨论页面重绘.回流之前.需要对页面的呈现流程有些了解,页面是怎么把html结合css等显示到浏览器上的,下面的流程图显示了浏览器对页面的呈现的处理流程.可能不同的浏览器略微会有些不同.但基本上都是类 ...

  5. 从输入url到页面呈现的过程

    从输入url到页面呈现的过程包括两个基本过程:网络通信和页面渲染 网络通信主要过程是 域名解析 -> TCP连接 -> HTTP请求 -> 服务端响应,返回HTML 页面渲染的主要过 ...

  6. EasyDSS高性能流媒体服务器前端重构(五)- webpack + vue-router 开发单页面前端实现按需加载 - 副本

    为了让页面更快完成加载, 第一时间呈现给客户端, 也为了帮助客户端节省流量资源, 我们可以开启 vue-router 提供的按需加载功能, 让客户端打开页面时, 只自动加载必要的资源文件, 当客户端操 ...

  7. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器前端重构(五)- webpack + vue-router 开发单页面前端实现按需加载

    为了让页面更快完成加载, 第一时间呈现给客户端, 也为了帮助客户端节省流量资源, 我们可以开启 vue-router 提供的按需加载功能, 让客户端打开页面时, 只自动加载必要的资源文件, 当客户端操 ...

  8. 输入一个URL到页面呈现其中发生的过程-------http过程详解

    在我们点击一个网址,到它能够呈现在浏览器中,展示在我们面前,这个过程中,电脑里,网络上,究竟发生了什么事情. 服务器启动监听模式 那我们就开始了,故事其实并不是从在浏览器的地址栏输入一个网址,或者我们 ...

  9. 在地址栏里输入一个 URL后,按下 Enter 到这个页面呈现出来,中间会发生什么?

    这是一个面试高频的问题 在输入 URL 后,首先需要找到这个 URL 域名的服务器 IP,为了寻找这个 IP,浏览器首先会寻找缓存,查看缓存中是否有记录,缓存的查找记录为:浏览器缓存 ->系统缓 ...

随机推荐

  1. Hibernater中的持久化对象以及状态转换

    一.持久化对象的要求 1.提供一个无参的构造器:使Hibernate可以使用Constructor.newInstance() 来实例化持久化类. 2.提供一个标识属性(identifier prop ...

  2. 索引大小 975.45 MB (1,022,836,736)

    975.45 MB (1,022,836,736)

  3. 2014-8-17 note

    一.方格求最短路径 二.用两种颜色去染排成一个圈的6个棋子,如果通过旋转得到则只算一种,一共有多少种染色模式 设两种颜色为黑白 全黑1种+全白1种=2 1黑5白(1种)+1白5黑(1种)=2种 2黑4 ...

  4. h5 移动端 关于监测切换程序到后台或息屏事件和visibilitychange的使用

    需求:当我们页面上正在播放视频或者播放背景音乐时,我们屏幕自动息屏或者切换程序去看消息时,我们希望暂停视频或背景音乐,回到程序我们希望继续播放视频或播放背景音乐.小程序上提供了 onUnload返回 ...

  5. Nginx的Location正则表达式

    location的作用 location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作. location的语法 已=开头表示精确匹 ...

  6. 矩阵管理——和visitor模式没有本质区别,都是为了避免资源重复

    矩阵管理中的员工是双线汇报的模式.其上司有两个,一个是流程上司,一个是专业上司.流程上司负责你的日常考核,专业上司负责你的晋升和任免. 管理条件 相对于矩阵管理的矩阵式组织,适合于某些较为庞大的全球性 ...

  7. 使用XMLHttpRequest

    请求种类 通过XMLHttpRequest的请求可以通过同步和异步的方式获取数据,请求的种类在XMLHttpRequest的open()方法的第三三个可选参数async设置.如果这个参数是true或者 ...

  8. P1014 Cantor表

    洛谷 p1014 题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2 ...

  9. NMS 原理 了解

    NMS 原理:对于Bounding Box的列表B及其对应的置信度S,采用下面的计算方式.选择具有最大score的检测框M,将其从B集合中移除并加入到最终的检测结果D中.通常将B中剩余检测框中与M的I ...

  10. 经验收获Linux终端下方便命令

    一.命令行日常系快捷键 如下的快捷方式非常有用,能够极大的提升你的工作效率: CTRL + U - 剪切光标前的内容 CTRL + K - 剪切光标至行末的内容 CTRL + Y - 粘贴 CTRL ...