日期: 2021 年 7 月 10 日

iOS APP应用程序进入到后台 ,不影响正在运行的后台音乐播放

1、在 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool{
}方法中加入如下代码:
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)

AVAudioSession.sharedInstance().setActive(true, error: nil)

Category的种类

AVAudioSessionCategoryAmbient

kAudioSessionCategory_AmbientSound
——用于非以语音为主的应用,使用这个category的应用会随着静音键和屏幕关闭而静音。并且不会中止其它应用播放声音,可以和其它自带应用如iPod,safari等同时播放声音。注意:该Category无法在后台播放声音

AVAudioSessionCategorySoloAmbient

kAudioSessionCategory_SoloAmbientSound
——类似于AVAudioSessionCategoryAmbient 不同之处在于它会中止其它应用播放声音。 这个category为默认category。该Category无法在后台播放声音

AVAudioSessionCategoryPlayback

kAudioSessionCategory_MediaPlayback
——用于以语音为主的应用,使用这个category的应用不会随着静音键和屏幕关闭而静音。可在后台播放声音
AVAudioSessionCategoryRecord

kAudioSessionCategory_RecordAudio

———
用于需要录音的应用,设置该category后,除了来电铃声,闹钟或日历提醒之外的其它系统声音都不会被播放。该Category只提供单纯录音功能。

AVAudioSessionCategoryPlayAndRecord

kAudioSessionCategory_PlayAndRecord
——用于既需要播放声音又需要录音的应用,语音聊天应用(如微信)应该使用这个category。该Category提供录音和播放功能。如果你的应用需要用到iPhone上的听筒,该category是你唯一的选择,在该Category下声音的默认出口为听筒(在没有外接设备的情况下)。

如果你想检查你是否设置声音的优先级成功了,可以用以下的代码:

NSError *error; BOOL success = [[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryAmbient error:&error]; if (!success) { //Handle errorNSLog(@”%@”, [error localizedDescription]); } else { // Yay! It worked! }

iOS开发Playground文件运行Running卡住问题

问题:运行Playground文件,卡住出现如下图所示的情况,一直在Running。

%title插图%num
解决方案:
1、首先关闭Xcode
直接关闭或者终端命令行输入下面语句关闭

killall Xcode
1
2、结束模拟器的进程
sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService
1
3、删除现有的模拟器,包括所有已安装的应用
rm -rf ~/Library/Developer/CoreSimulator/Devices
1
然后重新打开Xcode项目工程就行了,如果遇到一些模拟器莫名其妙的问题,也可以这样操作来一波,可能也会有些效果。

iOS调试——解决playground无法执行的问题

问题:无法显示playground语句执行的结果

解决的方法:
1.关闭Xcode
2.在终端里执行两行代码:
rm -rf ~/Library/Developer/CoreSimulator/Devices
killall -9 com.apple.CoreSimulator.CoreSimulatorService
再次打开Xcode,playground就可以执行了。

iOS开发——Appcode代码检查分析

优化项目的时候,可以使用Appcode分析功能,即Inspection功能。可以检查未使用的文件,拼写问题,类型检查等多种潜在疑难杂症。

打开菜单-code-选择Inspect Code

%title插图%num%title插图%num

222. 完全二叉树的节点个数(JS实现)

222. 完全二叉树的节点个数(JS实现)
1 题目
给出一个完全二叉树,求出该树的节点个数。
说明:
完全二叉树的定义如下:在完全二叉树中,除了*底层节点可能没填满外,其余每层节点数都达到*大值,并且*下面一层的节点都集中在该层*左边的若干位置。若*底层为第 h 层,则该层包含 1~ 2h 个节点。
示例:
输入:
1
/
2 3
/ \ /
4 5 6
输出: 6
2 思路
这道题我是层序遍历整个树,统计了一遍节点数量,没有用到完全二叉树这个概念,由于是完全二叉树,则除去*后一层的节点数量为2^d – 1,我们只需要计算完全二叉树*后一层有多少节点,可以给*后一层的节点编号0…2^d – 1,然后用二分算法来加快搜索速率:
1.如果树为空,返回 0。
2.计算树的高度 d(不包含*后一层)。
3.如果 d == 0,返回 1。
4.除*后一层以外的所有节点数为 2^d-1。*后一层的节点数通过二分搜索,检查*后一层有多少个节点。使用函数 exists(idx, d, root) 检查第 idx 节点是否存在。
5.使用二分搜索实现 exists(idx, d, root)。
6.返回 2^d – 1 + *后一层的节点数
3代码
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var countNodes = function(root) {
    if (!root) return 0;
    const queqe = [root];
    let index = 0;
    while(queqe.length > 0) {
        let p = queqe.shift();
        index++;
        if (p.left) queqe.push(p.left);
        if (p.right) queqe.push(p.right);
    }
    return index;
};

223. 矩形面积(JS实现)

223. 矩形面积(JS实现)
1 题目
在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
示例:
输入: -3, 0, 3, 4, 0, -1, 9, 2
输出: 45
链接:https://leetcode-cn.com/problems/rectangle-area
2 思路
这道题的思路就是两个矩形的面积相加再减去重叠的部分面积就是答案,于是重点就在于如何计算重叠部分的面积,*后可以总结规律
3代码
/**
 * @param {number} A
 * @param {number} B
 * @param {number} C
 * @param {number} D
 * @param {number} E
 * @param {number} F
 * @param {number} G
 * @param {number} H
 * @return {number}
 */
var computeArea = function(A, B, C, D, E, F, G, H) {
    let area = (C-A) * (D-B) + (G-E) * (H-F);
    let width = (Math.min(C,G) – Math.max(A,E));
    let height = (Math.min(D,H) – Math.max(B,F));
    let stackArea = (width > 0 ? width : 0) * (height > 0 ? height : 0);
    return area – stackArea;
};

226. 翻转二叉树(JS实现)

226. 翻转二叉树(JS实现)
1 题目
翻转一棵二叉树。
示例:
输入:
4
/
2 7
/ \ /
1 3 6 9
输出:
4
/
7 2
/ \ /
9 6 3 1
链接:https://leetcode-cn.com/problems/invert-binary-tree
2 思路
这道题用递归的方法就可以做,比较简单
3代码
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {TreeNode}
 */
var invertTree = function(root) {
    function d(p) {
        if (!p) return null;
        let temp = p.left;
        p.left = p.right;
        p.right = temp;
        d(p.left);
        d(p.right);
    }
    d(root);
    return root;
};

227. 基本计算器 II(JS实现)

227. 基本计算器 II(JS实现)
1 题目
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, – ,,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: “3+22”
输出: 7
示例 2:
输入: ” 3/2 “
输出: 1
示例 3:
输入: ” 3+5 / 2 “
输出: 5
链接:https://leetcode-cn.com/problems/basic-calculator-ii
2 思路
这道题考察逆波兰算法,主要的思路就是先将中缀表达式转换为后缀表单式,然后再进行计算,在此过程中注意多位整数的情况
3代码
/**
 * @param {string} s
 * @return {number}
 */
var calculate = function(s) {
    let stack = [];
    let nums = [];
    const map = {
        ‘*’: 1,
        ‘/’: 1,
        ‘+’: 0,
        ‘-‘: 0
    }
    let prev;
    for (let alpha of s) {
        if (alpha === ‘ ‘) continue;
        let transformNum = temp = parseInt(alpha);
        if (!isNaN(prev) && !isNaN(transformNum)) {  //处理多位整数
            let prevNum = nums.pop();
            transformNum = prevNum * 10 + transformNum;
        }
        prev = temp;
        if (isNaN(transformNum)) {
            while(stack.length > 0 && map[stack[stack.length – 1]] >= map[alpha]) {    //如果是当前符号小于栈顶符号优先级,则栈顶符号依次出栈
                nums.push(stack.pop());
            }
            stack.push(alpha);
        } else {     //如果是数字直接输出
            nums.push(transformNum);
        }
    }
    nums = nums.concat(stack.reverse());
    stack = [];
    for (let alpha of nums) {
        let transformNum = parseInt(alpha);
        if (isNaN(transformNum)) {
            let num2 = stack.pop();
            let num1 = stack.pop();
            if (alpha === ‘+’) {
                stack.push(num1 + num2);
            } else if (alpha === ‘-‘) {
                stack.push(num1 – num2);
            } else if (alpha === ‘*’) {
                stack.push(num1 * num2);
            } else {
                stack.push(parseInt(num1 / num2));
            }
        } else {
            stack.push(transformNum);
        }
    }
    return stack[0];
};

229. 求众数 II(JS实现)

229. 求众数 II(JS实现)
1 题目
给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。
示例 1:
输入: [3,2,3]
输出: [3]
示例 2:
输入: [1,1,1,3,3,2,2,2]
输出: [1,2]
链接:https://leetcode-cn.com/problems/majority-element-ii
2 思路
这道题用摩尔投票法进行解答,根据题意我们知道超过1/3的出现次数这样的数,*多出现两个,因此设置两个变量,遍历整个数组进行投票
3代码
/**
 * @param {number[]} nums
 * @return {number[]}
 */
var majorityElement = function(nums) {
    let len = nums.length;
    if (len === 0 || len === 1) return nums;
    let num1 = num2 = nums[0];
    let count1 = count2 = 0;
    for (let num of nums) {
        if (num === num1) {     //如果数字相同,得一票
            count1++;
            continue;
        }
        if (num === num2) {   //如果数字相同,得一票
            count2++;
            continue;
        }
        if (count1 === 0) {
            num1 = num;
            count1++;
            continue;
        }
        if (count2 === 0) {
            num2 = num;
            count2++;
            continue;
        }
        count1–;     //数字不同,则减一票
        count2–;    //数字不同,则减一票
    }
    count1 = count2 = 0;
    for (let num of nums) {
        if (num === num1) count1++;
        if (num === num2) count2++;
    }
    const res = [];
    if (count1 > len / 3) res.push(num1);
    if (count2 > len / 3 && num1 !== num2) res.push(num2);
    return res;
};
\

230. 二叉搜索树中第K小的元素(JS实现)

230. 二叉搜索树中第K小的元素(JS实现)
1 题目
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个*小的元素。
说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/
1 4
2
输出: 1
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/
3 6
/
2 4
/
1
输出: 3
链接:https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst
2 思路
这道题用递归的方法就可以做,比较简单
3代码
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} k
 * @return {number}
 */
var kthSmallest = function(root, k) {
    const res = [];
    function d(p) {
        if (!p || res.length === k) return;
        d(p.left);
        res.push(p.val);
        d(p.right);
    }
    d(root);
    return res[k-1];
};
友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速