IOS
不负红颜
热爱技术的90后
Q:476469612
展开
-
Objective C类方法load和initialize的区别
过去两个星期里,为了完成一个工作,接触到了NSObject中非常特别的两个类方法(Class Method)。它们的特别之处,在于iOS会在运行期提前并且自动调用这两个方法,而且很多对于类方法的规则(比如继承,类别(Category))都有不同的处理。而因为这两个方法是在程序运行一开始就被调用的方法,我们可以利用他们在类被使用前,做一些预处理工作。比如我碰到的就是让类自动将自身类名保存到一转载 2016-08-16 09:27:13 · 298 阅读 · 0 评论 -
ProtocolBuffer for Objective-C 运行环境配置及使用
一 、前言最近要做一个新的项目需要用到Google的Protocol Buffer,所以最近两天一直在学习这个。在网上看了很多人写的相关博客,发现他们写的配置环境的步骤不尽相同,并且不需要那么复杂,所以就想写一篇最新的文章。 配置环境:mac OS 10.11.1 本文若有叙述错误之处,欢迎指点。二 、Protocol Buffer简介Protocolbuffer(简称Protobuf转载 2016-11-01 14:29:31 · 1045 阅读 · 1 评论 -
@synchronized()的用法
@synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改。这个是objective-c的一个锁定令牌,防止对象在同一时间内被其它线程访问,起到线程的保护作用。 一般在公用变量的时候使用,如单例模式或者操作类的static变量中使用。# import "NetworkManager.h"static NetworkManager *netw原创 2016-11-28 16:26:17 · 386 阅读 · 0 评论 -
objc_setAssociatedObject 关联的使用
关联 关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。 关联特性只有在Mac OS X V10.6以及以后的版本上才是可用的。在类的定义之外为类增加额外的存储空间 使用关联,我们可以不用修改类的定义而为其对象增加存储空间。这在我们无法访问到类的源码的时候或者是考虑到二进制兼容性的时候是非常有用。 关联是基于关键字的,因此,我们原创 2016-11-28 16:43:04 · 617 阅读 · 0 评论 -
GCD中的dispatch_barrier_async函数的使用(栅栏函数)
void dispatch_barrier_async ( dispatch_queue_t queue, dispatch_block_t block );参数queue: 将barrier添加到那个队列block: barrier block 代码块下面内容翻译自官方文档一个dispatch barrier 允许在一个并发队列中创建一个同步点。当在并发队列中遇到一个原创 2016-11-28 16:44:32 · 1864 阅读 · 0 评论 -
NSURLSession与NSURLConnection区别
两者的区别主要在以下几个方面: 使用现状NSURLSession是NSURLConnection 的替代者,在2013年苹果全球开发者大会(WWDC2013)随ios7一起发布,是对NSURLConnection进行了重构优化后的新的网络访问接口。从iOS9.0开始, NSURLConnection中发送请求的两个方法已过期(同步请求,异步请求),初始化网络连接(init转载 2016-11-28 16:45:41 · 630 阅读 · 0 评论 -
GCD dispatch_semaphore 信号量
dispatch_semaphore 信号量基于计数器的一种多线程同步机制。在多个线程访问共有资源时候,会因为多线程的特性而引发数据出错的问题。dispatch_semaphore 信号量可理解为开启dispatch_semaphore_create(5)五个线程通道。当调用dispatch_semaphore_wait时将占有其中一个通道。如果可占用通道为0时,将无法继续占有,会进入原创 2016-12-23 17:31:22 · 477 阅读 · 0 评论 -
Network Link Conditioner模拟不同网络环境
在Xcode4.1中有一个工具叫Network Link Conditioner,可以让用户模拟不同的网络连接和带宽,可供Mac和iOS开发者测试自己的程序在不同网络环境下的表现。在Xcode4.3中,此工具不再随Xcode工具提供,需要单独下载。在Xcode4.3中通过Xcode->Open Developer Tool->More Developer Tools…菜单转载 2017-02-20 10:55:20 · 2093 阅读 · 0 评论 -
关于Xcode的Other Linker Flags中的一些参数
背景在iOS开发过程中,有时候会用到第三方的静态库(.a文件),然后导入后发现编译正常但运行时会出现selector not recognized的错误,从而导致app闪退。接着仔细阅读库文件的说明文档,你可能会在文档中发现诸如在Other Linker Flags中加入-ObjC或者-all_load这样的解决方法。那么,Other Linker Flags到底是用来转载 2017-02-14 15:33:58 · 770 阅读 · 0 评论 -
iOS App 签名的原理
iOS 签名机制挺复杂,各种证书,Provisioning Profile,entitlements,CertificateSigningRequest,p12,AppID,概念一堆,也很容易出错,本文尝试从原理出发,一步步推出为什么会有这么多概念,希望能有助于理解 iOS App 签名的原理和流程。目的先来看看苹果的签名机制是为了做什么。在 iOS 出来之前,在主流操作系统(Mac/Window转载 2017-03-14 17:40:38 · 802 阅读 · 0 评论 -
微信,QQ这类IM app怎么做——谈谈Websocket
前言关于我和WebSocket的缘:我从大二在计算机网络课上听老师讲过之后,第一次使用就到了毕业之后的第一份工作。直到最近换了工作,到了一家是含有IM社交聊天功能的app的时候,我觉得我现在可以谈谈我对WebSocket/Socket的一些看法了。要想做IM聊天app,就不得不理解WebSocket和Socket的原理了,听我一一道来。目录1.WebSocket使用场景2.转载 2017-05-23 10:48:52 · 1240 阅读 · 0 评论 -
iOS逆向工程工具之Theos
昨天开始安装theos,网上资料好多,不知是好还是不好,开始根据【ios应用逆向工程的书】安装,发现已经过时。。然后各种百度,遇到很多坑,都不知从何说起~先将参考链接附到下面供参考:http://blog.csdn.net/woaizijiheni/article/details/49332851http://www.cnblogs.com/ludashi/p/571409转载 2017-06-09 16:32:38 · 594 阅读 · 0 评论 -
iPhone安装OpenSSH和远程连接教程
在iOS的系统管理中,多半是使用命令行。在远程管理中,多半是用OpenSSH通过Wi-Fi或者3G来对iPhone、iPad、iPod Touch执行命令修改文件等操作。一句话,要想真正体验越狱,OpenSSH是必备软件。本文将引导大家如何使用OpenSSH运行命令和修改文件。OpenSSH for iOS 简介OpenSSH是一个在Linux下很实用的一个软件。iPhone本身就是一转载 2017-06-09 16:35:37 · 10378 阅读 · 1 评论 -
Xcode编译策略之代码逻辑顺序不正确,变量不显示问题解决方案
首先检查运行的scheme是release还是debug.检查项目的Targets的Build Settings中的Optimization Level其中的debug通常为None, 以使所有的信息都能输出来。最后再检查一个比较容易忽视的地方,在scheme中的Run的位置看是看debug的diagnostics中的全部选项,应该全不选。通常容易犯错在Enable Zombie Objects。原创 2017-06-22 09:38:26 · 394 阅读 · 0 评论 -
ios线程阻塞之NSCondition
线程阻塞原创 2017-06-22 09:46:39 · 933 阅读 · 0 评论 -
bzero, memset ,setmem 区别
From: http://blog.csdn.net/agathe/article/details/6066157bzero 原型:extern void bzero(void *s, int n);用法:#include 功能:置字节字符串s的前n个字节为零。 说明:bzero无返回值。 举例:转载 2017-08-22 16:11:29 · 686 阅读 · 0 评论 -
CFSocket
一、概念理解1.什么是Socket?Socket又称为“套接字”,是系统提供的用于网络通信的方法,本质并不是一个协议,没有规定计算机怎么样传递消息,只是给程序员提供一个接口,使用这个接口提供的方法,发送和接收消息。Socket简化了程序员操作,知道对方的IP和端口号的情况下,就可以给对方发送消息,再有服务端来处理,因此需要服务端和客户端。2.Socket的通信过程每一个应用或者转载 2017-08-22 16:43:00 · 1586 阅读 · 0 评论 -
iOS音频AudioQueue
本篇是AudioQueue的官方文档的笔记。Audio Queue Services可以play和record以下三类任何audio data:Linear PCM.Any compressed format supported natively on the Apple platform you are developing for.Any other format for which转载 2017-09-26 10:30:38 · 702 阅读 · 0 评论 -
IM 技术在多应用场景下的实现及性能调优:iOS 视角
IM 已经成为当下 App 的必备模块,在不同垂直领域,技术实现不尽相同。究竟该如何选型?技术实现过程中,又该如何进行性能调优?本篇文章分为应用场景、技术实现细节、针对移动网络特点的性能调优三个部分,具体讲解IM即时通讯技术在社交、直播、红包等不同场景下的技术实现与性能调优。需要注意,本文中所涉及到的所有 iOS 相关代码,均已 100% 开源(不存在 framework ),便于学习参考转载 2016-11-01 14:23:18 · 1513 阅读 · 0 评论 -
ios 通过runtime 获取属性列表并修改变量值
JSONModel第三方框架, 向服务器发起一个请求, 返回后的数据直接就是一个可用的Model。其中核心技术使用的便是runtime的反射机制,通过runtime将解析好的json数据直接存放到了我们的对象模型中。以下为自己写的一个测试demo,实现了获取属性列表并进行改值。/** 获取属性列表 */-(void)getProperties{ u_int count =原创 2016-10-26 16:52:18 · 8731 阅读 · 0 评论 -
总结Obj-C中+load与+initialize的区别
+load 与 +initialize两个类方法在Objective-C中,在于iOS会在运行期提前并且自动调用这两个方法。+load会在类初始加载时调用。+initialize会在第一次调用类的类方法或实例方法之前被调用。这两个方法是可选的,且只有在实现了它们时才会被调用。Apple的文档很清楚地说明了initialize和load的区别在于:load是只要类所在文件被引用就会被调用,原创 2016-08-16 10:16:28 · 411 阅读 · 0 评论 -
Objective-C Runtime 运行时
转自:http://www.cnblogs.com/Mr-Lin/p/5771969.htmlObjective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行转载 2016-08-16 14:56:17 · 494 阅读 · 0 评论 -
IOS三种多线程详解
iOS的三种多线程技术1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程)2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题ØNSOperation/NSOperationQueue 面向对象的线程技术ØGCD —— Grand Central Dispatch(派发) 是基于C语言的框架,可以充分利转载 2016-08-16 15:03:54 · 3387 阅读 · 0 评论 -
使用GCD
转自:http://blog.devtang.com/2012/02/22/use-gcd/什么是 GCDGrand Central Dispatch (GCD) 是 Apple 开发的一个多核编程的解决方法。该方法在 Mac OS X 10.6 雪豹中首次推出,并随后被引入到了 iOS4.0 中。GCD 是一个替代诸如 NSThread, NSOperationQueue, NSInvo转载 2016-08-16 15:31:19 · 347 阅读 · 0 评论 -
使用runloop阻塞线程
RunLoop从字面上看是运行循环的意思,这一点也不错,它确实就是一个循环的概念,或者准确的说是线程中的循环。每一个线程都有其对应的RunLoop,但是默认非主线程的RunLoop是没有运行的,需要为RunLoop添加至少一个事件源,然后去run它。一般情况下我们是没有必要去启用线程的RunLoop的,除非你在一个单独的线程中需要长久的检测某个事件。使用runloop阻塞线程直原创 2016-08-16 16:24:24 · 1155 阅读 · 0 评论 -
UICollectionView使用以及与UITableView的区别
在开始前我们在这先附一段最简单的代码- (void)viewDidLoad{ [super viewDidLoad]; UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; UICollectionView *colView =转载 2016-08-17 14:15:09 · 613 阅读 · 0 评论 -
盘点2016年iOS开发面试题及答案整理
在现如今,随着移动互联网科技不断的发展和创新,如今无论是公司还是开发者或设计师个人而言,面试都是一项耗时耗钱的项目,而面对iOS开发者及设计师在面试时可能会遇到的问题进行了筛选与汇总。下面我们一起来一下吧。 1、简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为转载 2016-08-27 17:59:55 · 505 阅读 · 0 评论 -
Obj-c数组排序
sortedArrayUsingComparator数组排序方法sortedArrayUsingSelector方法只能升序array = [array sortedArrayUsingSelector:@selector(compare:)];12// 给数组排序,块代码的返回值,比较结果// NSOrderedAscending = -1, 上升// NSOrderedSame原创 2016-08-19 13:46:49 · 445 阅读 · 0 评论 -
修改链接参数(Other Linker Flag)
Other Linker Flag参数分析:1.-ObjC这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来。这样编译之后的app会变大(因为加载了其他的objc代码进来)。但是如果静态库中有类和category的话只有加入这个flag才行。2.-all_load这个flag是专门处理-ObjC的一个bug的。用了-ObjC以后,如果原创 2016-08-08 14:19:02 · 3573 阅读 · 0 评论 -
Socket如何兼容IPV6
IPV6简要:什么是IPv6什么是IPv6?IPv6是下一版本的互联网协议,也可以说是下一代互联网的协议,它的提出最初是因为随着互联网的迅速发展,IPv4定义的有限地址空间将被耗尽,地址空间的不足必将妨碍互联网的进一步发展。为了扩大地址空间,拟通过IPv6重新定义地址空间。IPv6采用128位地址长度,几乎可以不受限制地提供地址。随着5月初Apple明文规定所有开发者原创 2016-08-08 14:41:30 · 3528 阅读 · 0 评论 -
iOS/NSUserDefaults详解
NSUserDefaults是什么,有什么用处对于应用来说,每个用户都有自己的独特偏好设置,而好的应用会让用户根据喜好选择合适的使用方式,把这些偏好记录在应用包的plist文件中,通过NSUserDefaults类来访问,这是NSUserDefaults的常用姿势。如果有一些设置你希望用户即使升级后还可以继续使用,比如玩游戏时得过的最高分、喜好和通知设置、主题颜色甚至一个用户头像,那么你可以使转载 2016-08-20 10:56:11 · 480 阅读 · 0 评论 -
@try异常处理
转载自:http://blog.sina.com.cn/s/blog_71715bf8010166qf.html开篇大话: Object-C语言的异常处理符号和C++、JAVA相似。再加上使用NSException,NSError或者自定义的类,你可以在你的应用程序里添加强大的错误处理机制。异常处理机制是由这个四个关键字支持的:@try,@catch,@thorw,@finally原创 2016-08-20 13:51:03 · 586 阅读 · 1 评论 -
流式套接字(TCP)、数据报套接字(UDP)
套接字是网络通信的基本构件,提供了不同主机间进程双向通信的端点。如果电话,只有当一方拨通另一方时,双方才能建立对话。通过套接字编程,程序可以跳过复杂的网络底层协议和结构,直接编制与平台无关的应用程序。目前,套接字已逐渐成为网络编程的通用接口。 套接字存在于其特定的通信域(即协议族)中,只有隶属于同一协议族的套接字才能建立对话。一般情况下除非通信协议支持,只有相同类型的套接字才能相互原创 2016-08-09 10:25:37 · 12338 阅读 · 0 评论 -
iOS程序中的内存分配 栈区堆区全局区
在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同。一、内存分区栈区(stack) 由编译器自动分配并释放,存放函数的参数值,局部变量等。栈是系统数据结构,对应线程/进程是唯一的。优点是快速高效,缺点时有限制,数据不灵活。[先进后出]栈空间分静态分配 和动态分配两种。 静态分配是编译器完成的,比如自动变量(auto)的分配。 动转载 2016-08-22 20:01:10 · 355 阅读 · 0 评论 -
xcode 代码不高亮 不提示语法错误 解决方法
方法一:1.把.pch里的内容全部注释掉2.clean掉项目里的内容3.把.pch里的注释去掉,编译。4.代码高亮,语法提示功能都回来了。方法二:1.关闭项目2.选择Window->Organizer->Projects3.选择失效的那一个工程,右健,Remove from Organizer4.打开工程,失效的功能都回来了方法三原创 2016-09-20 09:40:21 · 2130 阅读 · 0 评论 -
IOS 如何获取与修改图片的EXIF信息
简介:Exif是一种图像文件格式,它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及GPS全球定位系统数据、缩略图等。你可以利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片,但并不是所有的图形程序都能处理Exif信息原创 2016-10-25 14:46:45 · 7837 阅读 · 0 评论 -
UIImage与CIImage的区别
CIImage 包含了创建图片的所有必要的数据,但其本身没有渲染成图片,它代表的是图像数据或者生成图像数据的流程(如滤镜);CGImage是基于像素的矩阵,每个点都对应了图片中点的像素信息;UIImage 管理图片数据,主要用来展现,如 UIImageView 中,控件中等,也可以用来直接在 view 或其他的 context 中绘制。CIImage包含图片的所原创 2016-10-25 14:55:07 · 3040 阅读 · 0 评论 -
sonar检查代码质量
ios项目我提供了一个sample的项目,首先git clone该项目到本地。git clone https://github.com/DoctorQ/ios_test.gitCloning into 'ios_test'...remote: Counting objects: 88, done.remote: Total 88 (delta 0), reused 0 (delt转载 2018-02-01 09:26:21 · 707 阅读 · 0 评论