数组和可变性
在Swift中,数组是值类型。并且Swift中,Swift标准库中的所有集合类型都使用了“写时复制”这一技术,避免了大量副本导致性能下降。值类型的好处,不仅是性能有提高,其次就是能保证数组的不可变。
在Objective-C中,声明一个不可变的数组 NSArray 并不能保证数组的不可变。例如:
123456let mutableAry = NSMutableArray(array: [1, 2, 3])/// 我们不想让 ary 被改变,声明为不可变数组let ary: NSArray = mutableAry/// 但是事实上它依然能够被 a 影响并改变mutableAry.add(5)ary // [1, 2, 3, 5]
正确的做法是,在赋值的时候,先进行拷贝:
12345let nsAry = mutableAry.copy() as! NSArraymutableAry.add(10)mutableAry // [1, 2, 3, 5, 10]nsAry // [1, 2, 3, 5]
值类型的优点
* 不变性
值类型的变量是严格的被一个所有者控制的
...
之前我一直以为,Swift是一门弱类型的语言。
判断依据:
Swift 变量不强制的指定类型,而是用 var 和 let 表示可变与不可变。所以,Swift是一门弱类型的语言。
但是,看了一下强弱类型的时候,才恍然大悟。其实 var 和 let 的特性,只是说明Swift是一门动态类型的语言。并不能指出是否是强或弱类型。
一些定义:
静态类型语言:是一种编译器无法自动检测类型的语言。
动态类型语言:是一种编译器能够自动检测类型的语言。
强类型语言:强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。
弱类型语言:弱类型语言也称为弱类型定义语言。与强类型定义相反。像vb,php,js等就属于弱类型语言。
光看定义不够生动,还是来举个例子:
Java是一种静态类型语言,也是一种强类型语言。因为编译器不能自动检测类型,所以它是静态的,而且类型受到严格限制,所以它也是一种强类型语言。
javascript是一种动态类型语言和非强类型语言。因为编译器能够在运行时检测类型,并且类型也不受严格限制。
所以,基于上面的 ...
如果你发现连不上你的 VPS了,那么有一种可能就是端口被封,我们需要改一下 VPS 端口了。
登陆服务器如何登陆 VPS 可以参考这篇文章: SSH 免密登陆 VPS
修改 VPS 的 SSH 端口VPS 的端口配置在文件 sshd_config 中,我们直接用如下的命令打开文件:
1vi /etc/ssh/sshd_config
在文章的末尾你能看到 Port 字段,一般默认是 22,随意修改一个数字,建议 1000 以下。然后保存退出。重启 VPS 即可。
登陆电信光猫打开浏览器,输入 http://192.168.1.1 ,进入光猫管理页面,用 useradmin 账户登陆。将地址栏中的连接 http://192.168.1.1/cgi-bin/content.asp 改为 http://192.168.1.1/cgi-bin/telnet.asp 。出来如下的界面:
启用 Telnet ,点击确定。
终端获取超级密码打开 Mac 终端,输入命令
123456telnet 192.168.1.1# 用户名 admin# 密码 1234cat /tmp/ctromfile.cfg
按住 control + s 键,保存终端内容到文件。
文件中搜索 telecomadmin ,就能看到超级密码了。
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:
123456789101112131415161718192021222324252627282930313233343536373839file.close()# 关闭文件。关闭后文件不能再进行读写操作。file.flush()# 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。file.fileno()# 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。file.isatty()# 如果文件连接到一个终端设备返回 True,否则返回 False。file.next()# 返回文件下一行。file.read([size])# 从文件读取指定的字节数,如果未给定或为负则读取所有。file.readline([size])# 读取整行,包括 "\n" 字符。file.readlines([sizehint])# 读取所有行并返回列表,若给定sizeint>0,则是设置 ...
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__int__.py 用于标识当前文件夹是一个包。考虑一个在 package_runoob 目录下的 runoob1.py、runoob2.py、__init__.py 文件,test.py 为测试调用包的代码,目录结构如下:
12345test.pypackage_runoob|-- __init__.py|-- runoob1.py|-- runoob2.py
package_runoob/runoob1.py
12345#!/usr/bin/python# -*- coding: UTF-8 -*- def runoob1(): print "I'm in runoob1"
package_runoob/runoob2.py
12345#!/usr/bin/python# -*- coding: UTF-8 -*- ...
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块让你能够有逻辑地组织你的 Python 代码段。把相关的代码分配到一个模块里能让你的代码更好用,更易懂。模块能定义函数,类和变量,模块里也能包含可执行的代码。
import 语句
模块的引入
模块定义好后,我们可以使用 import 语句来引入模块,语法如下:
1import module1[, module2[,... moduleN]
比如要引用模块 math,就可以在文件最开始的地方用 import math 来引入。在调用 math 模块中的函数时,必须这样引用:
1模块名.函数名
当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。
一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
From…import 语句
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:
1from modname import name1[, n ...
我们在进行 SSH 登陆的时候,每次都需要输入密码,就感到十分的不方便,这里可以利用 SSH Key(ssh公钥) 来验证登录,从而实现免密登陆。
通过命令生成 SSH Key生成 SSH Key 我们需要 ssh-keygen 命令
1234ssh-keygen -t rsa -C "xxxxx@xxxxx.com" # Generating public/private rsa key pair...# 三次回车即可生成 ssh key
查看生成的 SSH Key
12cat ~/.ssh/id_rsa.pub# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....
在 .ssh 文件夹中,可能有三个文件
id_rsa : 生成的私钥文件
id_rsa.pub : 生成的公钥文件
know_hosts : 已知的主机公钥清单
我们需要用的就在 id_rsa.pub 文件中。
如果希望ssh公钥生效需满足至少下面两个条件: * .ssh 目录的权限必须是700 * .ssh/au ...
在Objective-C的ARC模式中,
1id obj1 = [[NSObject alloc] init];
这里虽然没有显示的声明为 __strong ,但是 Objective-C 默认声明的一个对象就为 __strong ,即:
1id obj1 = [[NSObject alloc] init];
和
1id __strong obj1 = [[NSObject alloc] init];
是等价的。
在强引用中,有时会出现循环引用的情况,这时就需要弱引用来帮忙( __weak )。
强引用持有对象,弱引用不持有对象。
强引用可以释放对象,但弱引用不可以,因为弱引用不持有对象,当弱引用指向一个强引用所持有的对象时,当强引用将对象释放掉后,弱引用会自动的被赋值为nil,即弱引用会自动的指向nil。
下面用代码来说明:
123456789101112131415161718192021222324252627282930313233//// main.m// ARC中的强引用和弱引用//// Created by on 15/3/31.// Copyright ...
现在苹果iOS系统已经原生支持了二维码扫描的功能,使用原生来扫描需要导入 AVFoundation 。
扫描准备
一、获取摄像设备:
1device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
二、创建输入流
12345do { try input = AVCaptureDeviceInput(device: device)} catch let e as NSError { print(e.localizedDescription)}
三、创建输出流
123output = AVCaptureMetadataOutput()// 设置代理在主线程中刷新output?.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
四、初始化连接对象
12345session = AVCaptureSession()// 高质量采集率session?.canSetSession ...