自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CINNS的博客

Don't stop

  • 博客(36)
  • 收藏
  • 关注

原创 iOS获取设备UUID

在项目中写上以下代码,可以获取iOS设备的UUID UIDevice *device = [UIDevice currentDevice]; NSUUID *uuid = device.identifierForVendor; NSString *str = uuid.UUIDString; NSLog(@"UUIDString%@",str);

2016-01-29 18:54:39 419

原创 字符串定义和基本操作

字符串是一串有序字符的集合,在swift中,字符串用string类型来表示,也是字符类型的集合,兼容字符类型(character)和字符串类型(string),字符串链接可以用+号,字符串的更新和普通常量和变量那样操作,非常方便,每一个swift的string都是用Unicode的字符来存储,这样如果要在一个页面显示多国文字,很方便.字符串字面量,let时候,为不可变字符串,var为可变字符串let

2016-01-28 23:13:11 1070

原创 storyboard解析2

添加tableHeaderView和tableFooterVie是的,没有听错,不用代码,“拖”出header于footer,其实很简单,选中tablView,在控件中找到View拖到tableView上,往最上方拖动,知道看到左右有两个圈的时候松手,这个View就是tableHeaderView了,同理,往最下方拖,就是tableFooterViewLaunchScreen.storyboard从

2016-01-28 20:29:59 487

原创 storyboard解析

如何理解SB?最简单的理解就是:一个.storyboard文件相当于多个基于VC使用的.xib文件,由此我们可以看出,SB(只能基于VC,不能基于View),我们有多个VC的类是可以和一个SB文件建立关系的,使用方法:SecVC *secVC = [[UIStoryboard storyboardWithName:@"Demo" bundle:[NSBundle mainBundle]] insta

2016-01-28 20:11:56 902

原创 xib中使用auto layout

iPhone5使屏幕从3.5”增大到了4.0”,与之对应的iOS6也就引入了auto layout,auto layout是一个很重要的概念,是独立于xib的,但是auto layout从一开始就是与xib强绑定的,因为在xib里设置auto layout是最简单的。我们这里默认大家对auto layout有基本的了解,网上有好多专门讲auto layout的教程,而且大多都是基于xib的,大家可以

2016-01-28 19:31:31 1023

原创 iOS汉字字符串转拼音

有时候在开发中会遇到,需要通过拼音来进行排序,分类,但是服务器并没有返回带拼音的字符串,苹果为我们提供了对应的方法,来获取拼音 NSString *hanziText = @"我是中国人--重庆---长沙"; if ([hanziText length]) { NSMutableString *ms = [[NSMutableString alloc] initWith

2016-01-28 11:41:54 350

原创 19.选并操作符(空合运算符)

空值合并操作符,是对三元运算符在可选类型情况下的一种简化操作let 底线品牌 = "华为"var 理想品牌 : String?var 实际入手 = (理想品牌 ?? 底线品牌)//结果显示为华为,因为当前"理想品牌为nil"理想品牌 = "iPhone"实际入手 = (理想品牌 ?? 底线品牌)//结果显示为"iPhone",

2016-01-27 23:20:49 479

原创 18.逻辑运算符

逻辑非”!”,逻辑或”||”,逻辑与”&&” 逻辑非作用是讲true变为false,讲false变为true1.逻辑非let 请进 = falseif !请进 { print("请进")} else { print("不要进来")}2.逻辑与let 密码正确 = truelet 指纹正确 = falseif 密码正确 && 指纹正确 { print("进门成功"

2016-01-27 23:17:25 263

原创 17.闭区间和半开区间

闭区间,有一个起始和终止的范围,包含起始值和终止值,主要用途用在for-in循环for index in (1...5) {//闭区间 print("\(index) times 5 is \(index)")}//相当于定义一个变量i i>=1 && i <= 5.开区间,一般用在数组循环中,避免数组越界错误var 群主名单 = ["群主1","群主2","群主3","群主4"]va

2016-01-27 23:15:48 1501

原创 16.比较运算和三元条件

比较运算符一般用来比较两个变量大小相等的情况,分为 == , != ,> , < ,>= , <= , 其中 ===(特征等于运算符) 和!== (特征不等于运算符)let 欢迎信息 = "欢迎来我的blog"if 欢迎信息 == "欢迎来我的blog" { print("我很欢迎你!")} else { print("慢走不送啊...")}三元条件运算符,是swift中唯一的一

2016-01-27 23:12:13 279

原创 15.取正负和组合赋值

我们常常需要一个负的数,这时候需要用到”一元取负操作符”,比如:let san = 3let 负三 = -san//值为-3let 正三 = -负三 //值为3加法运算符let 取正 = +负三//值为-3+号的作用只是和-号在形式上的配对组合赋值var a = 1a += 3 //表达意思等于a = a + 3

2016-01-27 23:09:02 714

原创 14.浮点数取余和自增自减

在swift语言中,可以对浮点数进行取余操作,比如1024 % 3.5Int (1024 / 3.5) 292 * 3.5 + 2自增和自减,这种运算在循环中经常用到, var i = 0 ++i //等同于 i = i + 1 --i //等同于i = i - 1++ i 和 i++ 的区别 —>++i是把变量先+1再返回,i++是先使用i这个值,然后把i+1返回var 赞 = 0let

2016-01-27 23:05:33 1944

原创 iOS通过邮件获取APP异常崩溃信息

在AppDelegate.m文件中实现以下方法,程序在生产环境中,若发生崩溃,会提示用户发送邮件给开发者:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customizati

2016-01-27 21:04:09 551

原创 iOS实现APP调用打电话,发短信,发邮件,打开Safari

打电话:- (IBAction)phone:(id)sender { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];}打开Safari:- (IBAction)Safari:(id)sender { [[UIApplication sharedApplicat

2016-01-27 20:52:41 890

原创 xib、storyboard文件的使用

xib文件的使用1.基于UIViewController子类的xib的使用这种情况下使用很简单,对VC直接alloc,init就可以,VC会自动去找自己对应的xib文件,即使我们自定义了一些init方法,也不需要对加载他的xib做处理,系统会自动帮我们找是否有与其对应的xib文件,例如我们有这样一个初始化方法- (instancetype)initWithCustemData:(id)aData;我

2016-01-27 19:16:17 484

原创 13.基础操作符

操作符一共分为三种,unary,Binary,TernaryUnary:每次只操作一个目标,而且紧跟变量或者常量前面或者后面,没有空格(如:-a,i++),是一个一元操作符Binary:位于操作的2个对象中间,而且最好有空格分开(如:2+3),这样看得比较清楚,是二元操作符Ternary:用来表示逻辑判断(如:a ? b : c),三元操作符//赋值let b = 10var a = 5

2016-01-26 23:12:53 697

原创 12.断言Assert

尽管可以用optional来检查值存不存在,有时候在代码中,是需要一个值,或者能满足的值,程序才能运行,这时候需要assert来对程序进行调试,如:let 年龄 = 100assert(年龄 >= 18, "A person's age cannot be less than 18")assert(年龄 >= 0, "年龄必须是大于0的值")这里有一个情况,加入我的年龄为小于18的一个数,那么程序就

2016-01-26 23:09:24 410

原创 11.可选类型(间接拆包)

optional表示一个常量或者变量没有值的这种情况,我们用if语句来判断,用binding语句来访问它的值,有时候,一个程序中,一个optional一定是有值的,这时候我们就不需要用if语句来check它,我们几乎可以假定这个是一定有值的,这种类型叫做间接拆包,如:let 彩票 : String! = "5"//这样就不需要对他进行if判断和拆包工作,可以直接打印他的值print("此次彩票中奖

2016-01-26 23:05:48 359

原创 UITextView中禁止输入表情Emoji

在UITextView代理方法中调用以下2个方法- (void)textViewDidChange:(UITextView *)textView { if (![self isValidString:textView.text]) {//如果输入框中有表情 textView.text = [self disableEmoji:textView.text];//去掉输入框的表情

2016-01-26 15:12:00 824 2

原创 10.可选类型optional(解包和绑定)

当一个值可能是不存在的时候,就需要用到可选类型(optionals),optionals一种情况是值不存在,另外一种情况是他有一个值,这个值等于某一个X,例如:let possibleNumber = "123"let convertedNumber = Int(possibleNumber)//通过这个方法就直接转为整型print(convertedNumber)let 昨天我买的彩票 = "

2016-01-25 23:09:50 1245

原创 9.元组类型

一般,在swift语言中,如果我临时想把几种类型凑在一起,我们可能需要这个tuples(元组类型),通过”()”,之间用”,”隔开如let http404Error = (404,"Not Found")//又如let 昨天我网购的一件衬衫 = (70,"白色",true)//价格,颜色,是否合身//如果我要去访问元组里面的元素,通过重新定义一个元组变量,将上一个元组的值赋给新的元组,然后将值取出

2016-01-25 23:06:47 358

原创 -canOpenURL: failed for URL: "xx" - error:"This app is not allowed to query for scheme xx"

控制台输出如图是在我启动一个 Xcode 7 + iOS 9 的 App 之后,控制台的输出。这在 Xcode 6.4 + iOS 8 时,是不会有的情况,原因是【为了强制增强数据访问安全, iOS9 默认会把所有从NSURLConnection 、 CFURL 、 NSURLSession发出的 HTTP 请求,都改为 HTTPS 请求:iOS9.x-SDK编译时,默认会让所有从NSURLConn

2016-01-25 12:19:48 1434

原创 set方法内存分析(2)

应用场景与上一个分析场景相同,都是人去拥有一辆车,这次的问题是我不是去重新拥有一辆车,而是我去多次set同一辆车的时候,会存在一些问题,如:#import <Foundation/Foundation.h>#import "person.h"int main(int argc, const char * argv[]) { @autoreleasepool { person

2016-01-24 16:36:00 370

原创 set方法内存分析(1)

这个之前的内存管理分析中,存在一些问题,比如说在多个对象中,要保证一个对象没有被系统回收之前,不能被销毁掉,就像下面的这个demo一样,person有一辆车,但是他觉得这辆车他不喜欢了,他想换一辆车,那我有2个car的对象,该怎么去处理这个内存管理的问题.#import <Foundation/Foundation.h>#import "person.h"int main(int argc, c

2016-01-24 16:20:36 705

原创 8.布尔类型

在swift中一种基本类型叫做Boolean,简称Bool,这种逻辑只有2种结果,一种为真,一个为假let 橘子是橙色的 = truelet 萝卜好吃 = falseif 橘子是橙色的 { print("橘子是橙色的")} else { print("橘子不是橙色的")}//在swift只有逻辑为真或者假才可以行得通let i = 2if(i == 2) { pr

2016-01-23 23:53:15 283

原创 7.类型别名

swift中我们可以将系统的变量名加上一个新的名字,可以通过下面这种方式如:typealias 整型 = Int//这样的话就可以在代码中直接用"整型"这样的一个类型进行使用var z:整型 = 0z = 整型.max//这里的整型和Int是等价的

2016-01-23 23:51:38 256

原创 6.数值型类型转换

在swift中,我们定义整型的变量或者常量,在正常情况下只能用int,在特殊的情况下,可能要定义一些特殊类型,如UInt,我们在给这样的一个类型赋值的时候不能超过这个类型的范围//let a: UInt8 = -1 //这样赋值就会报错//let a: UInt8 = 256//这样赋值也不行,超过了这个类型发范围0-255//不同整型的变量,在相互计算的时候,不能直接计算,必须要进行类型的

2016-01-23 23:50:10 315

原创 5.数值型字面量

在swift中,提供了数值的表示方法,列如//不同进制的表示方法let 十进制的10 = 10let 八进制的8 = 0o10let 二进制的2 = 0b10let 十六进制的16 = 0x10//如果想表示一个很大的数字或者一个很小的数字,表示方法let 一百万 = 1e6//1*10的6次方let 一百万分之一 = 1e-6let 十六进制十五的2的2次方 = 0xFp2let 十亿元

2016-01-23 23:47:45 342

原创 4.类型安全和类型推断

swift是一种类型安全的语言(强类型语言),所以在定义一个变量的时候,必须清楚的表达它的类型,例如定义了一个string类型的字符串,就不能传递一个整型的值,会导致错误,这样做的目的是防止在编译的时候,出现不匹配的错误,可以在开发过程中尽早的发现一些低级错误类型推断,它是根据在定义变量的时候给的一个初始值来进行判断的该变量属于什么类型let meaningOfLine = 42//swift

2016-01-23 23:44:59 267

原创 多个对象的内存管理分析

与单个对象相同内存管理分析相同,同样是处理内存泄露和空指针的问题,分析背景为有一个汽车(car)的类,一个人(person)的类,人有一辆车,要保证,在人没有被系统销毁前,车不能被销毁,代码分析如下:#import <Foundation/Foundation.h>//人拥有一辆汽车#import "Person.h"int main(int argc, const char * argv[])

2016-01-23 22:17:41 384

原创 单个对象内存管理分析

手动内存管理,主要需要注意2个问题,一个是空指针,另外一个是内存泄露,在开发当中,该如何去避免这样的问题,且看下面分析.首先还是要遵守内存管理原则(配对原则):只要出现了 new,alloc,retain,就一定配对出现一个release,autorelease通过代码进行说明:#import <Foundation/Foundation.h>#import "Person.h"void te

2016-01-23 21:56:11 361

原创 iOS中内存管理基本概念

我们都知道,在使用objective-c进行iOS应用开发中,我们创建一个对象主要分为三个步骤:分配内存空间,存储对象(alloc)初始化成员变量(init)返回对象的指针地址MRC在使用MRC进行程序开发中,每当我们创建一个对象的时候,系统都会为我们一个与内存管理相关的属性:retainCount(引用计数器),该属性用来记录当前对象被引用的次数,当一个对象刚刚创建出来的时候,retain

2016-01-23 19:54:33 395

原创 3.浮点型

浮点型分为2种,一种是double(64位,精确到小数点后16位),一种是float(32位,精确到小数点后6位),区别在于精度不同let PI:Float = 3.1234124143424//实际精度到小数点后6位 let PI2:Double = 3.12345678901234567890//实际精度为小数点后16位

2016-01-22 23:55:42 411

原创 2.整数类型

在swift中,整数分为2中类型,一种为带正负号的整数,一种为不带正负号的整数let minValue = UInt8.min //没有负数的类型,不带符号 最大值为2的8次方,最小值为0 let maxValue = UInt8.max //值为255let minValuee = Int.min //带正负号,这个数最小,为负2的64次方,取决于平台操作系统的位数 let maxValuee

2016-01-22 23:53:29 427

原创 1.常量与变量

var str = "Hello, playground"print(str)定义一个常量和变量let maxLoginAttempts = 10 //let 关键字表示maxLoginAttempts 为常量,其值不能改变,改变常量的值,会报错 var currentLoginAttempt = 0 //var 关键字表示currentLoginAttempt 为变量,可以修改这个值常量

2016-01-22 23:50:04 360

原创 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2016-01-22 23:36:11 259

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除