- 博客(63)
- 收藏
- 关注
原创 OC调用Swift以及调用Swift中的方法和变量
之前在开发是遇到了在OC文件中调用Swift对象的变量调用不到的问题,这里总结一下:1.首先我们一个Swift项目TestProject。2.建立一个Swift的文件继承自NSObject名字为SwiftFile.swift,并声明一个字符串变量swiftName。import UIKitclass SwiftFile: NSObject { var swiftName...
2019-02-26 14:16:29
6218
原创 iOS混编之OC文件中的枚举如何在Swift文件中调用
在OC和Swift混编的过程中有很多的细节需要注意。今天介绍一下在OC文件中声明了一个枚举类型,如何在Swift文件中调用该枚举类型的值。1.项目工程构建的时候选的是Swift语言,项目名称TestProject。2.建立一个Swift文件SwiftTestFile.swift 和一个OC的文件 ObjectTestFile.h 和ObjectTestFile.m。在ObjectT...
2019-02-25 20:35:07
3091
原创 UIAlertController在Pad上使用UIAlertControllerStyleActionSheet模式崩溃问题
因为Pad上的UIAlertController在UIAlertControllerStyleActionSheet模式时与手机端不同,Pad不会从底部弹出,而是需要在给定的视图位置弹出。所以需要做一个配置:1.定义一个View@property (strong,nonatomic) UIView *showSaveSheetView;2.实现控件的设定UIAlertCon...
2019-01-09 14:31:54
1716
转载 Git中tag标签的使用
一、什么是tagtag是git版本库的一个标记,指向某个commit的指针。tag主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 v.1.0.2 ...这样的标签。tag感觉跟branch有点相似,但是本质上和分工上是不同的:tag 对应某次commit, 是一个点,是不可移动的。branch 对应一系列commit,是很多点连成的一根线,有一个H...
2018-08-20 10:24:37
17409
2
原创 iOS 手动解析崩溃日志
最近偶然与到一个线上crash问题,一直无法复现,十分苦恼,大家都知道,如果在开发阶段,完全可以设置全局断点等等方式进行crash定位,但是线上的问题怎么解决呢?经过研究学习后发现,我们可以通过线上crash日志来进行线上bug的定位。恰巧我们的APP内部集成了talkingdtata,然后就总结一下线上崩溃日志的解析办法。从talkingdata的崩溃信息列表可以查看崩溃日志,其中形式大...
2018-04-16 15:58:03
1588
2
原创 OC消息转发机制
我们都知道,在OC的开发的过程中,如果不小心调用了一个不存在的方法,这个时候系统就会报出 unrecognized selector sent to instance …但是从方法调用到报出错误信息,其实是有一个处理过程的,这个过程就是消息的转发机制。过程中主要涉及的方法有://第一步+ (BOOL)resolveInstanceMethod:(SEL)sel;//实例方法处理 处理实例方法...
2018-04-16 15:42:57
474
转载 使用xcconfig配置环境参数(Debug-Release)
在开发工作中,我们经常性的会随着开发环境的变化而使用不同的配置,我们现在是有开发、测试、发布三个环境,每个环境都有自己的接口访问地址,以及一些第三方SDK的Key配置,这些东西有点经验的都会集中到一个头文件或者pch文件中定义成不同的宏块,这样每次改变环境只要去这个文件修改就可以。//开发#define BaseURL @"192.168.102.111:8080/appname/api"#d...
2018-04-13 12:16:41
2177
原创 iOS 获取设备唯一识别码 IDFV+keychain
最近项目中需要获取到设备的唯一标志传送给后台存储备用,在UDID UUID IDFA等都存在诸多问题(什么问题可以自己查阅资料)的情况下,选择了 IDFV+keychain(当然特殊情况下也存在些许问题,但基本无影响,非常够用)。identifierForVendor是apple给供应商唯一的一个值,也就是说同一个公司发行的的app在相同的设备上运行的时候会有这个相同的标识符。然而,如果用户删除了...
2018-04-12 18:56:58
3692
原创 CocoaPods使用详细说明
一、概要iOS项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以统一管理这些第三方库。如果此文章已过时,可以查看 融云 集成文档,有关于cocoaPods的集成说明。点击打开链接二、安装1、Ruby环境搭建当前安装环境为MacBook Air 10.11.4。Mac OS本身自带Ruby,但...
2016-04-10 17:00:54
2210
原创 适配iOS9出现的一些问题
前段时间,公司的项目中集成的微信支付在测试的时候出现了问题,明明手机上安装了微信,支付的时候却总是提示"未安装微信客户端",经查验发现只有iOS9系统的有这种问题,于是进行调试,发现控制台打印出了一下提示:-canOpenURL: failed for URL: "weixin://app/wx9c8771d3c07dfd30/" - error: "This app is not allowed
2016-03-16 10:03:16
658
原创 WebView获取当前网页的页面元素
今天简单总结一下,如何通过WebView来获取Html的页面元素。第一步,首先用WebView加载一个Html页面NSString *str=@"http://........."; UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT-44)]; webView.de...
2016-03-13 01:55:23
5972
原创 iOS之多线程开发(NSThread,NSOperation,GCD)
今天闲来无事,就来总结一下iOS中的多线程开发吧。iOS有三种多线程编程的技术,分别是:1.NSThread------每个NSThread对象对应一个线程,量级较轻(真正的多线程)2.NSOperation------NSOperation/NSOperationQueue 面向对象的线程技术3.GCD------Grand Central Dispatch(派发) 是基于C语言的框架,可以充分...
2016-03-03 17:32:48
1336
原创 苹果开发者证书与发布证书显示:此证书的签发者无效
今天早上发布项目总是不成功,于是打开钥匙串发现所有的证书都显示“此证书的签发者无效”,开始以为真的是所有证书过期了,可是重新生成证书下载安装后依然不行,后来才发现是:Apple Worldwide Developer Relations Certification Authority Intermediate Certificate证书过期了。解决办法:首先打开钥匙串(Keychain),显示-&...
2016-03-02 18:03:11
752
原创 内存管理以及Autorelease和自动释放池
今天闲来无事,对OC的内存管理部分做了一下简单的总结,现在基本都是用的Arc,不过了解一下内存管理也没有坏处注:ObjC中的内存管理机制跟C语言中指针的内容是同样重要的,要开发一个程序并不难,但是优秀的程序则更测重于内存管理,它们往往占用内存更少,运行更加流畅。虽然在新版Xcode引入了ARC,但是很多时候它并不能完全解决你的问题。在Xcode中关闭ARC:项目属性—Build Settings-...
2016-03-02 10:44:32
882
原创 算法中的各种排序以及查找时间复杂度
今天简单的总结一下算法中经常用到的排序以及查找(用C语言实现,不全,持续更新)一、首先是最常见也是最常被问的冒泡排序(原理就是每趟排序相邻两两比较...因为比较好理解,就省略了)//冒泡排序-(void)maoPaoPaiXu{ int i,j,temp; int a[10]={3,5,1,2,6,5,2,1,3,4}; //输入 /*for(i=0;...
2016-03-01 17:55:27
8813
1
转载 IOS测试之--断言
一、Objective - C 中的断言:Objective - C 中的断言处理使用的是 NSAssertionHandler :每个线程拥有它自己的断言处理器,它是 NSAssertionHandler 类的实例对象。当被调用时,一个断言处理器打印一条包含方法和类名(或者函数名)的错误信息。然后它抛出一个 NSInternalInconsistencyException 异常。基础类中定义了两...
2016-03-01 15:33:09
646
转载 编译测试 LLVM与LLDB
首先让我们先通过百度了解一下LLVM链接:点击打开链接然后重点了解一下LLDB这个东西随着Xcode 5的发布,LLDB调试器已经取代了GDB,成为了Xcode工程中默认的调试器。它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能。LLDB为Xcode提供了底层调试环境,其中包括内嵌在Xcode IDE中的位于调试区域的控制面板,在这里我们可以直接调用LLDB命令。如图1所示:图...
2016-02-27 20:39:12
3269
原创 Typedef和define
#define 是宏命令,在编译前,由预处理器做替代,如同文本编辑的替代命令,把程序中的所有遇到的词,全部替代。与#define不同,Typedef主要用于为各种数据类型定义一个新的名字(别名)。今天跟大家分享一下Typedef的两种不通用法:ONE:使用Typedef定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我...
2016-02-27 20:17:02
530
原创 浅谈OC运行时(RunTime)
浅谈OC运行时(RunTime) 本文转自好友 逗姜哈士奇常说OC是一门动态语言,这使得OC开发可以变得相当灵活,但是归根结底OC还是一种编译型的语言,其具有一定的动态性,但是其动态特性也比不上JavaScript这种解释型的语言。OC的动态性主要体现在这个文件中,下面我们打开这个文件,对其总结一下。一、基本结构及其继承关系要谈runtime首先必然要先了解OC的对象以及类的结构,这非常有助与我...
2016-02-27 18:09:59
696
转载 堆与栈的区别
数据结构的栈和堆首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈。堆和栈都是一种数据项按序排列的数据结构。 栈就像装数据的桶或箱子我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体)。 堆像一棵...
2016-02-25 14:52:56
562
转载 数组、链表、堆栈、队列和树
数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合。听起来是不是很抽象,简单理解:数据结构就是描述对象间逻辑关系的学科。比如:队列就是一种先进先出的逻辑结构,栈是一种先进后出的逻辑结构,家谱是一种树形的逻辑结构!(初学数据结构的时候很不理解为什么有“栈”这个东西;队列很容易理解---无论购物就餐都需要排队;栈可以认为就是个栈道---只允许一个人通过的小道,而且只能从一端进入,然后再从这端
2016-02-25 10:04:39
9455
原创 Xcode6中添加pch文件
在Xcode6中新建的项目不会出现自带的pch文件,但是有时候却必须要用到,下面我们手动添加一个pch文件首先新建一个项目,名字叫abc,然后Command+N,打开新建文件窗口:ios->other->PCH file,创建一个pch文件,添加需要引入的头文件名(名字无限制)这次我们就叫PrefixHeader.pch 添加成功之后,修改工程配置文件,将刚刚创建的PCH file的路...
2015-10-12 14:26:29
478
原创 iOS中的可用字体
想单独指定某段文本字体类型,但是sdk文档中似乎没有iphone可用字体列表 ,找到一种方法,可以查看当前sdk可用字体类型执行如下代码NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]]; NSArray *fontNames; NSInteger indFamily, indFon...
2015-05-15 17:01:06
818
原创 iOS中的自定义通知和通知传值的简单介绍
一、通知通知中心实际上是在程序内部提供了消息广播的一种机制。通知中心不能在进程间进行通信。实际上就是一个二传手,把接收到的消息,根据内部的一个消息转发表,来将消息转发给需要的对象。通知中心是基于观察者模式的,它允许注册、删除观察者。一个NSNotificationCenter可以有许多的通知消息NSNotification,对于每一个NSNotification可以有很多的观察者Observer来...
2015-05-15 14:13:03
3510
原创 iOS中的延展和协议
延展部分一、延展的介绍延展也叫Extension,形式和类目相同,是一种特殊形式的类目(匿名类目),主要是为现有类添加私有方法,可以通过建立文件创建延展,也可以直接在现有类的.m中声明延展。延展的声明形式:@interface 现有类名 ()//这里可以声明方法@end二、延展的特点(注意事项)1、如果括号里没有类目名,则认为延展里面的方法为全都必须实现,如果有名,则认为是可选实现。2、虽然延展是...
2015-05-14 09:41:35
861
原创 iOS中的类目(类别)
一、类目的简单介绍1.什么是类目(类别)类别( category )是 Objective-C 语言的新特性,为现有的类添加新方法的方式。比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现,用类目就可以实现在没有类的源代码的条件下为类增加新的方法。通过类目加入的方法会成为原始类的一部分。例如:通过类目想NSString增加方法,编译器会把这些方法加到NSString的定义...
2015-05-13 16:26:23
1815
原创 iOS中有关沙盒的一些知识的介绍(获取沙盒路径以及沙盒文件操作等)
一、iOS中的沙盒机制iOS应用程序只能对自己创建的文件系统读取文件,这个独立、封闭、安全的空间,叫做沙盒。每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用的文件系统隔离。它一般存放着程序包文件(可执行文件)、图片、音频、视频、plist文件、sqlite数据库以及其他文件。每个应用程序都有自己的独立的存储空间(沙盒)一般来说应用程序之间是不可以互相访问的,在ios8中已经开...
2015-05-13 09:58:03
4276
原创 iOS屏幕适配之通过代码实现控件按比例缩放
众所周知,随着6和6p的出现,iphone手机的屏幕大小出现了多样化,再加上ipad,于是屏幕适配成为了一个非常棘手的问题,一直以来也没有出现一种比较科学统一而又效果不错的适配方法。这里简单介绍一种适配的方法,就是控件按照屏幕的比例进行放大。因此在设计界面的时候我通常是按照5和5s来设计控件的大小和位置,然后再根据屏幕横向比例来缩放控件和控件位置具体实现如下1.宏定义#define SCREEN_...
2015-05-12 15:44:34
5448
原创 iOS中NSArray的各种遍历以及各种排序方法
一、遍历1.for循环遍历NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];int count = array.count;for (int i = 0; i<count; i++) { id obj = [array objectAtIndex:i];}2.快速遍历 Stud...
2015-05-12 14:52:20
7099
原创 继承自UIView的控件如何使用xib
有时候敲代码敲烦了,或者某部分的UI非常复杂,用代码会耗费太多时间,这时我们通常就考虑使用xib来实现了,特别是一些独立的UI控件组合(通常会用UIView作为底层容器)。一、UIView与Xib关联事实上我们通过Add---New Files--Cocoa Touch来创建一个UIView时,默认是不能选择xib的下面我们来说一说如何为UIView来加一个xib文件1.Add---New Fil...
2015-05-12 13:54:36
3020
原创 关于AppDelegate及内部方法的简单介绍
今天来对AppDelegate做一个简单的介绍一、简单介绍AppDelegate是整个应用的一个代理,也类似于整个应用的入口和出口(应用启动的时候最先走到这里,应用关闭的时候最后也会走到这里),AppDelegate实际上是实现了UIApplicationDelegate协议的类。UIApplicationDelegate协议定义了很多和Application状态、消息相关的方法。您可以简单的理解...
2015-05-12 11:24:15
1636
原创 https与SSL证书的简单介绍以及它与http的区别
前端开发免不了要跟后台交互,获取一些数据,而网络安全就不得不成了必要考虑的问题,特别是在有关金钱交易方面,安全尤为重要,于是我们来看一下SSL证书和https是怎么作用于网络安全方面的。一、SSL证书:SSL 的英文全称是 “Secure Sockets Layer” ,中文名为 “ 安全套接层协议层 ” ,它是网景( Netscape )公司提出的基于 WEB 应用的安全协议。
2015-04-10 10:37:03
1014
原创 iOS面试题总结
@synthesize和@dynamic区别在声明property属性后,有2种实现选择@synthesize编译器期间,让编译器自动生成getter/setter方法,当有自定义的存或取方法时,自定义会屏蔽自动生成该方法。@dynamic告诉编译器,不自动生成getter/setter方法,避免编译期间产生警告,然后由自己实现存取方法或存取方法在运行时动态创建绑定:主要使用在CoreData的实...
2015-04-08 17:13:14
524
原创 ios开发之Runloop简介
RunLoop从字面上看是运行循环的意思,这一点也不错,它确实就是一个循环的概念,或者准确的说是线程中的循环。 本文一开始就提到有些程序是一个圈,这个圈本质上就是这里的所谓的RunLoop,就是一个循环,只是这个循环里加入很多特性。 首先循环体的开始需要检测是否有需要处理的事件,如果有则去处理,如果没有则进入睡眠以节省CPU时间。 所以重点便是这个需要处理的事件,在RunLoop中,需要处理的
2015-04-08 15:33:23
675
转载 XML解析和Json解析简介以及两者的区别
现在比较交流行和常用的对于网络请求数据的解析的方式基本就是XML解析和Json解析下面我们来对这两种解析方式做一些总结一、XML解析:服务器端解析是通过一般的XSLT转换工具(如Java下的Xalan)将XML和XSL合成为HTML,送到客户端。 客户端解析是把XML和XSL都显现给客户端,把解析的任务交给浏览器。当然对于不同的解析器有不同的工作原理,目前常用的XML
2015-04-08 14:39:01
4763
原创 Http网络请求中的get和post请求简介以及二者区别
对于http网络请求其实有很多种方式,只是平时比较常用的是Get请求和Post请求,相对来说Post请求更加常用一些,下面先展示一下都有哪些http相关的请求方式:请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:GET: 请求指定的页面信息,并返回实体主体。HEAD: 只请求页面的首部。POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。PUT: 从客...
2015-04-08 13:28:27
3806
原创 Http与Socket的介绍以及两者之间的区别
一、首先来介绍一下Http:HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。 HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。 在HTTP 1.0中,客户端的...
2015-04-07 22:12:01
637
原创 UITableView如何让cell的分割线左边不缩进
在ios7中,UITableViewCell左侧会有默认15像素的空白。这时候,设置setSeparatorInset:UIEdgeInsetsZero 能将空白去掉。但是在ios8中,设置setSeparatorInset:UIEdgeInsetsZero 已经不起作用了。可以用以下方法去除左边的默认缩进:1.首先在viewDidLoad方法加入以下代码: if ([self.tableView...
2015-04-07 17:05:21
1927
转载 TCP/IP协议简单总结
TCP/IP模型也被称作DoD模型,字面上代表了两个协议:TCP(传输控制协议)和IP(网际协议)。中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供...
2015-04-06 21:41:31
744
原创 iOS视图响应者链以及响应处理和传递过程
用户点击屏幕后产生的一个触摸事件,经过一些列的传递过程后,会找到最合适的视图控件来处理这个事件,找到最合适的视图控件后,就会调用控件的touches方法来作具体的事件处理,事件包括(不做详解):touchesBegan…touchesMoved…touchedEnded…一、响应者链的概念: iOS系统检测到手指触摸(Touch)操作时会将其打包成一个UIEvent
2015-04-06 18:43:47
1615
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人