C++和iOS码农
Swift中的析构器的作用类似C++中的析构器,用deinit关键字,在实例被销毁之前被自动调用的,主要作用是释放一些资源,比如你之前打开了一个数据库,并写入一些数据,在类实例被释放之前需要关闭该数据库。
串(String)—–零个或多个字符组成的有限序列 a="beijinghuanyingni" b="beijinghuanying" c="beijin" d="" 子串:串中任意个连续的字符组成的子序列称为该串的子串。
在上一篇博客中简单介绍了构造器基础层面的知识构造器(一),下面我们深入的学习类的构造器应用。 在Swift中类一共有两种构造器: 指定构造器 便利构造器 什么是指定构造器,有什么作用? 我个人的理解为在类中没有加任何关键字的构造器称为指定构造器,作用为初始化类中所有的实例存储属性 init() { ... } 什么是便利构造器,有什么作用? 我个人理解为在类中(只能在类中,结构体和枚举里面是没有的)加上convenience关键字的构造器为便利构造器,作用为辅助性调用指定构造器进行一系列的工作。
构造器的关键字是init,今天我们就谈谈这个init关键字,在创建类或者结构体时,必须为所有的存储属性设置初始值,我们可以在定义的时候直接设置默认值。或者在构造器中设置值。 实例存储的初始化大致分为如下几类: 定义实例存储属性时显式指定初始值。
在Object-C中我们已经清楚的知道有实例方法、属性和类方法、属性,类方法只能有类去调用,而实例方法只能有类申请的实例去调用。而在Swift中同样遵守这个约定。 在Swift中有static、class两个修饰符,这两个修饰符的作用是一样的,但它们的使用场景是不一样的。
学习可选链的前提我们要对可选类型进行复习,可以参考我之前写的这篇博客Object-C—>Swift之(二)可选类型 个人理解可选链建立在可选类型的基础上,可选类型操作的是某个变量,而可选链操作的是某几个类 围绕今天是猴年正月二十一为题材,学习一下这个可选链 ...
说起下标的作用对于数组和字典来说并不用陌生,但在Swift中所有的类型都支持下标。用下标可以很方便的访问对象的具体值。 语法格式 使用subscript关键字定义下标 subscript(形参列表)->下标返回值类型 { get{ //getter部分执行体,该部分必须有返回值 } [set(形参名) { //setter部分执行体,该部分一定不能有返回值 }] } set部分:set部分可定义一段执行性代码,这段代码用于对下标赋值。
属性观察者机制能让程序在属性被赋值时获得执行代码的机会,用来监视属性的除初始化之外的属性值变化,当属性值发生改变时可以对此作出响应 具体包括两个特殊的回调方法: willSet(newValue):被观察的属性即将被赋值之前自动调用方法。
我之前写过一篇博客,介绍缓存处理的三种方式,其中最难,最麻烦,最占内存资源的还是图片缓存,最近做的项目有大量的图片处理,还是采用了SDWebImage来处理,但是发现之前封装好的代码报错了。
添加PCH文件 现在Xcode6、7创建一个新的工程时将默认不会再带有PCH文件,需要手动添加PCH文件。 在Supporting Files目录下,选择 File > New > File > iOS > Other > PCH File 然后点击下一步进行命名,建议命...
iOS开发过程中有好多第三方框架,十分便捷与开发者用最少的代码完成最优秀的App,一个上线的项目差不多得用到很多的框架,如果我们一个一个进行添加,则显得特别的慢,慢不是重点,重点是还容易出错,例如加载高德地图的框架特别复杂的环境适配,一步出错就会出现不知名的怪错误。
一直想总结一下关于iOS的离线数据缓存的方面的问题,然后最近也简单的对AFN进行了再次封装,所有想把这两个结合起来写一下。数据展示型的页面做离线缓存可以有更好的用户体验,用户在离线环境下仍然可以获取一些数据,这里的数据缓存首选肯定是SQLite,轻量级,对数据的存储读取相对于其他几种方式有优势,这里对AFN的封装没有涉及太多业务逻辑层面的需求,主要还是对一些方法再次封装方便使用,解除项目对第三方的耦合性,能够简单的快速的更换底层使用的网络请求代码。
计算属性相当于Object-C的getter、setter合成的属性,在Swift中结构体、类都可以定义计算属性 定义计算属性 [修饰符] var 计算属性名:属性类型{ get{ //getter方法执行体,该方法必须有返回值 } [set(形参名) {...
Swift引入了一种新的机制–延迟存储属性机制,在第一次被调用时才会被计算初始值的属性,声明时需要使用lazy修饰符。 注意:定义属性时一定得是变量(var),常量是无法使用延迟存储机制。
在Swift中类和结构体有高度的相似性。二者主要区别是: 1. 结构体不支持继承 2. 结构体不支持定义析构器 3. 结构体是值类型,而类是引用类型 定义类语法格式: [修饰符]class 类名 { 零个到多个构造器 零个到多个属性 零个到多个方法 零个到多个下标 } 对一个类定义而言,包括3种最常见的成员:构造器、属性、方法,如果程序员没有为一个类提供构造器,则系统会为该类提供一个默认、无参数的构造器。
声明枚举 Swift使用enum定义枚举,语法格式为 enum 枚举名 { //使用case关键字列出所有枚举值 //枚举的其他成员 } Swift即允许每个枚举值单独用一个case关键字,也允许使用一个case定义多个枚举值,多个枚举值之间以英文逗号隔开。
队列是一种先进先出的线性表,它只允许在表的一段进行插入,而在另外一端删除元素。 队列的顺序表示—用一维数组base[M] #define M 100//最大队列长度 Typedef struct{ QElemType...
嵌套函数 函数分为全局函数和局部函数,前面已经介绍了全局函数,下面介绍下局部函数,定义在函数体内部的函数可以成为嵌套函数。 注意:嵌套函数对外是隐蔽的,只能在其封闭函数内有效,嵌套函数只能在其封闭函数内有效,其封闭函数也可以返回嵌套函数,以便于程序在其他作用域内使用嵌套函数。
是什么是函数重载? 名字相同的函数出现在一起,就构成了函数重载,只要形参列表或者返回值类型不同就行。 判断条件 形参列表、 返回值类型组成、 外部形参名 三者其中一种不一样均可作为函数重载 举例说明 //该函数类型为()->Void fu...
认识函数类型 每个函数都有特定的函数类型 函数类型是由函数的形参类型、->和返回值类型组成。 例如: func Add(a:Int,b:Int){ ... } 该函数的函数类型为(Int,Int)->Void或者(Int,Int)->() func Add()->Int{ .
定义 只能在表的一端(栈顶)进行插入和删除运算的线性表 逻辑结构 一对一关系 存储结构 用顺序栈或链栈存储均可,但以顺序栈更常见 运算规则 只能从栈顶运算,且访问结点时依照后进先出(LIFO)或后进后出(FILO)的原则 实现方法 关键是编写...
前面我们介绍了函数的入门语法,今天就仔细学习下函数的形参功能 经典款式 func addDouble(a:Float,b:Float)->Float { return a+b } 这个函数最经典的样式,实现了两个数的相加的功能 外部参数 我们在实际项目开发中类似这样的函数给形参传值的时候因没有介绍性的语句会出现传参错误。
上一篇博客学习了顺序表,最后也说明了顺序表属于静态存储,数据元素的个数不能自由的扩充。为了解决这个问题我们引入了链表 链表存储结构 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻,因此线性表的链式表示又称为非顺序映像或链式映像。
数组 Swift的数组继承了C、Object-C的功能,目前并没有独特的新功能的添加。 声明数组 泛型语法 Array var myArray:Array 简化语法 [类型] var myArray:Array[Int] 创建数组结构体,并将数组赋值 使用Array的构造器创建数组。
Swift依然继承了C和Object的Switch语句,但在原有的基础上进行了改变,使其变得更加强大 任性的case标签: case标签可以紧跟多个值 var score = "C" switch score { case "A...
nil合并运算符 在Swift中引入一种新的运算符nil合并运算符:??,它的格式如下: let c = a??b 它的含义如下:判断可选变量a是否为nil,如果a不为nil,c就等于a所包装的真实值,如果a为nil,则程序会返回b的值。
可选和nil的恋情 先看一个例子吧! let str="hello world" let num:Int=Int(str) 这两行代码的意思str字符串转换成Int类型,嘿嘿!这不是坑计算机吗?hello world能转换成Int类型的数字吗?很显然不能,而且我们运行都不会通过的! 可是我们把第二行代码换成 let num:Int?= Int(str) 编译就通过了!就这样可选类型就呼之欲出! 定义: 在任何类型后面紧跟一个?就可以代表可选类型,可选类型的变量可用于处理“值缺失”的情况。
元组(tuple)类型 元组(tuple)使用圆括号把多个值组成一个复合值,里面的每个值可以是任意类型,而且它们之间可以不同类型。 格式 变量或常量关键字 元组变量 = ( 变量,变量, …) 保存某个信息表上的一行信息,可以创建一个元组 var in...
线性表的定义和特点 定义: 有n(n≥0)个数据特性相同的元素构成的有序序列称为线性表。 当个数n(n≥0)定于为线性表的长度,n=0时成为空表。 特点: 只有一个首结点和尾结点; 除首尾结点外,其他结点只有一个直接前驱和一个直接后继。
C语言的动态分配函数 malloc(m):开辟m字节长度的地址空间,并返回这段空间的首地址 sizeof(x):计算变量x的长度 free(p):释放指针p所指变量的存储空间,即彻底删除一个变量 C++的动态存储分配 new 类型名T(初值列表) 功能:申请用于存放T类型对象的内存 int *p1=new int; 或 int *p1=new int(10); 结果值: 成功:T类型的指针,指向新分配的内存 失败:0(NULL) delete 指针p 功能:释放指针P所指向的内存。
一次数学课上,老师让学生练习算数。于是让他们一个小时内算出1+2+3+4+5+6+……+100的得数。全班只有高斯用了不到20分钟给出了答案,因为他想到了用(1+100)+(2+99)+(3+98)……+(50+51)…………一共有50个101,所以50×101就是1加到一百的得数。
数据结构是一门研究非数值计算程序设计中的操作对象,以及这些对象之间的关系和操作的学科。 基本概念和术语 *数据(data)–所有能输入到计算机中去的描述客观事物的符号的总称 *数据元素(data element)–数据的基本单位,也成结点(node)或记录(recor...
* 我们从AppStore里面下载软件的时候,当我们第一次打开的时候总会有一个内容介绍页面(如下图我之前做的这个项目的丑陋的介绍页,卧槽,Boss说漂亮,真TMD怀疑他的审美!哎,创业公司,众多不易),随后再打开就没有了,下面我就给大家分享一下怎样实现该功能* * 其实实现的原理很简单,就是本地沙盒保存的版本号跟Info.plist文件里面的版本号进行对比,不一致就说明新安装的或者更新了新版本。
每次大家更新完Xcode,是不是发现之前装的插件不能用啦? 是的!每当Xcode升级之后,都会导致原有的Xcode插件不能使用,这是因为每个插件的Info.plist中记录了该插件兼容的Xcode版本的DVTPlugInCompatibilityUUID,而每个版本的Xcode的DVTPlugInCompatibilityUUID都是不同的。
截止目前,苹果除了很多设备了。iOS开发者们如何获取设备? 导入头文件 #include #include 直接调用 //获得设备型号 + (NSString *)getCurrentDeviceModel:(UIViewController *)contro...
var alertController=UIAlertController(title: "标题", message: "这是一个UIAlertController的默认样式", preferredStyle: UIAlertControllerStyle.
正则表达式是什么鬼呀?(大神请绕路哦) 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
哈哈!先上理论篇: MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如: MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461 这就是tanajiya.tar.gz文件的数字签名。
大家有没有发现???发现什么呢?What? 在平常用的App中,每一页的导航栏的颜色和字体都是一样的,有些是背景图片,有些是通过UIColor设置的颜色背景,本人在以前开发中,每次都在每个页面写一次导航栏的背景。
**阿拉伯数字转化为汉语数字** +(NSString *)translation:(NSString *)arebic { NSString *str = arebic; NSArray *arabic_numer...
概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的。如今,网络编程越来越普遍,孤立的应用通常是没有生命力的。
在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏的背景和文字Color 方法一: [objc] view...
Grand Central Dispatch简称(GCD)是由苹果公司开发的技术,是一个非常好的用于多核设备的解决方案。GCD核心在于两个概念: 队列:队列负责管理开发者提交的任务,GCD队列始终以FIFO(先进先出)的方式来处理任务-----但由于处理执行的时间不同,所以先处理的任务并不一定先结束。
本文目录 一、创建代码仓库,用来存储客户端所上传的代码 二、配置svn的用户权限 三、使用svn客户端功能 在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境。
MVC是所有面向对象程序设计语言都应该遵守的规范,MVC思想是将一个应用分成三个基本部分:Model(模型)、View(视图)和Controller·(控制器),它们以最少的耦合协同工作,从而提高应用的可扩展性和可维护性。
UIViewController在UIKit中主要功能是用于控制画面的切换,其中的view属性(UIView类型)管理整个画面的外观.大部分控制器类都会继承UIKit的UIViewController基类,该基类中包含了大量方法,可以重写这些方法来处理视图的加载、视图显示等各种事件。
UIPageControl继承了UIControl基类,默认属于活动控件,它可以与用户进行交互,经常与UIScrollerView结合使用,在实际项目也是经常使用的。当把UIScrollView的pagingEnabled设置为YES之后,UIScrollView至少每次滚动一页。
UIAlertView和UIActionSheet是iOS自带的弹出式对话框。当这俩个控件出现时,用户无法与其他控件进行交互。 两个区别在于: UIAlertView是显示在屏幕中央的,而UIActionSheet是显示在底部的按钮列表。
UISwitch控件是iOS开发的基础控件,是非常简单的一个控件,因为它的方法比较少。UISwitch继承于UIControl基类,因此可以当成活动控件使用。 注意:开关状态通过它的on属性进行读取,该属性是一个BOOL属性 创建: UISwitch* mySwitch = [[ UISwitch alloc]initWithFrame:CGRectMake(0、150.0f,100.0f,0.0f,0.0f)]; 可能你会疑问为什么它的大小都设置为0?没错,它的大小你设置是无效的,系统会为你分配尺寸。