• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift入门笔记(四)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

编码规范

  • 用 Tabs,而非 空格
  • 文件结束时留一空行
  • 用足够的空行把代码分割成合理的块
  • 不要在一行结尾留下空白
  • 千万别在空行留下缩进
  • 对于只读属性的 properties 和 subscripts,选用隐式的 getters 方法
  • 如果可以,省略只读属性的 properties 和 subscripts 的 get 关键字

举栗子说明

对于顶级定义,永远明确的列出权限控制
顶级函数,类型和变量,永远应该有着详尽的权限控制说明符

当指定一个类型时,把 冒号和标识符 连在一起
当指定标示符的类型时,冒号要紧跟着标示符,然后空一格再写类型

需要时才写上 self
当调用self的 properties 或 methods 时,self用默认的隐式引用:

相对于 classes 先选 structs

除非需要 class 才能提供的功能(比如identity或 deinitializers),不然就用 struct
要注意到继承通常不是用 类 的好理由
多态 可以通过 ==协议 ==实现
重用 可以通过 ==组合 ==实现。

默认 classes 为 final
Classes应该作为基类,只能被子类已识别正当的继承。即使这种例子,根据同样的规则,类中的定义也要尽可能的用 final 标注上
理由: 组合通常比继承更合适,而且不用 继承意味着考虑的更多

能不写类型参数的就别写了
参数化类型的方法可以省略接收者的类型参数,当他们对接收者来说一样时。比如:

理由: 省略多余的类型参数让意图更清晰,并且通过对比,让返回值为不同的类型参数的情况也清楚了很多。

时间 日期

  • 如何定义时间变量?(当前时间 昨天 明天)
  • 如何按指定格式显示时间?(2016-10-1 10/1/2016 AM PM )
  • 如何处理不同时区的时间?(北京 纽约 伦敦 东京)
  • 如何显示当前日期?(公历 or 农历)

字符串处理

  • 转为大(小)写 uppercased lowercased
  • 去掉左右空格 trimmingCharacters(in: .whitespaces)
  • 判读是否以某些字符串开始(或结束) hasPrefix hasSufix
  • 获取字符数 characters.count
  • 分解字符串 components(separatedBy: " ")
  • 查找字符串 rangeOfString
  • 取子字符串 substring
  • 从文件初始化 String(contentsOfFile: )
  • 保存到文件 write(toFile: )

文件操作(沙盒)

  • 如何防止安装恶意APP?
  • 如何防止恶意APP修改破坏操作系统的文件?
  • 如何防止恶意APP随意访问你的私人信息?
  • 如何防止恶意APP访问或修改其他APP的文件?
  • 代码签名 + 用户权限 (mobile) + 沙盒

攻击点少:
不支持Flash和Java
减弱部分文件的扩展功能(比如:psd、pdf等)

沙盒机制:
iOS防御机制的最后一环是沙盒
沙盒可以对进程可执行的行动提供更细粒度的控制
应用程序只能访问自己的数据和用户许可的部分系统数据,不能直接访问其他应用的数据

代码签名:
所有的二进制文件(binary)和类库在被内核允许执行之前都必须经过受信任机构(比如苹果公司)的签名
内存中只有那些来自已签名来源的页才会被执行
这样做都是为了防止用户从因特网上下载和执行随机的文件
签名可以保证所有的应用都必须从苹果的App Store下载

文件操作( sandbox 沙盒)

每个iOS应用都被限制在“沙盒”中
沙盒相当于一个加了仅主人可见权限的文件夹
在应用程序安装过程中,系统为每个单独的应用程序生成它的主目录和一些关键的子目录

苹果对沙盒有几条限制:

  1. 应用程序在自己的沙盒中运作,但是不能访问任何其他应用程序的沙盒;
  2. 应用之间不能共享数据,沙盒里的文件不能被复制到其他应用程序的文件夹中,也不能把其他应用文件夹复制到沙盒中;
  3. 苹果禁止任何读写沙盒以外的文件,禁止应用程序将内容写到沙盒以外的文件夹中;

沙盒也有例外,比如系统通讯录能在用户授权的情况下被第三方应用访问)

sandbox对应用程序执行各种操作的权限限制
这个规则把iOS系统的封闭性(安全性)展现的淋漓尽致

目录结构

每个应用的沙盒目录都是相似的,主要包含3个目录和应用程序:

每个应用的沙盒目录都是相似的,主要包含3个目录和应用程序:
Documents:存储应用程序的数据文件,存储用户数据或其他定期备份的信息;
Library:有两个文件夹,Caches存储应用程序再次启动所需的信息,
Preferences:包含应用程序的偏好设置文件,不可在这更改偏好设置;temp存放临时文件即应用程序再次启动不需要的文件。

1、MyApp.app
存放内容
该目录包含了应用程序本身的数据,包括资源文件和可执行文件等。程序启动以后,会根据需要从该目录中动态加载代码或资源到内存,这里用到了lazy loading的思想
整个目录是只读的
为了防止被篡改,应用在安装的时候会将该目录签名。
非越狱情况下,该目录中内容是无法更改的
在越狱设备上如果更改了目录内容,对应的签名就会被改变,这种情况下苹果官网描述的后果是应用程序将无法启动

2、Documents
存放内容
将应用程序的数据文件保存在该目录下。
这些数据类型仅限于不可再生的数据,可再生的数据文件应该存放在Library/Cache目录下。

3、Documents/Inbox
存放内容
该目录用来保存由外部应用请求当前应用程序打开的文件。
比如我们的应用叫A,向系统注册了几种可打开的文件格式,B应用有一个A支持的格式的文件F,并且申请调用A打开F。由于F当前是在B应用的沙盒中,我们知道,沙盒机制是不允许A访问B沙盒中的文件,因此苹果的解决方案是讲F拷贝一份到A应用的Documents/Inbox目录下,再让A打开F。

4、Library
存放内容
苹果建议用来存放默认设置或其它状态信息。

  • Library/Caches

存放内容
主要是缓存文件,用户使用过程中缓存都可以保存在这个目录中
Documents目录用于保存不可再生的文件,而这个目录用于保存那些可再生的文件,比如网络请求的数据
鉴于此,应用程序通常还需要负责删除这些文件。

  • Library/Preferences

存放内容
应用程序的偏好设置文件
使用NSUserDefaults写的设置数据都会保存到该目录下的一个plist文件中,即所谓的写入plist

  • tmp

存放内容
各种临时文件,保存应用再次启动时不需要的文件。
当应用不再需要这些文件时应该主动将其删除,因为该目录下的东西随时有可能被系统清理掉,目前已知的一种可能清理的原因是系统磁盘存储空间不足的时候。

  • Documents/Inbox

1)存放内容
该目录用来保存由外部应用请求当前应用程序打开的文件。
比如我们的应用叫A,向系统注册了几种可打开的文件格式,B应用有一个A支持的格式的文件F,并且申请调用A打开F。由于F当前是在B应用的沙盒中,而沙盒机制是不允许A访问B沙盒中的文件,因此苹果的解决方案是将F拷贝一份到A应用的Documents/Inbox目录下,再让A打开F。
2)是否会被iTunes同步


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Swift]LeetCode1032.字符流|StreamofCharacters发布时间:2022-07-13
下一篇:
[Swift]LeetCode437.路径总和III|PathSumIII发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap