
OC
文章平均质量分 93
bravegogo
知行合一,积学养气
展开
-
【iOS程序启动与运转】- RunLoop个人小结
学习iOS开发一般都是从UI开始的,从只知道从IB拖控件,到知道怎么在方法里写代码,然后会显示什么样的视图,产生什么样的事件,等等。其实程序从启动开始,一直都是按照苹果封装好的代码运行着,暴露的一些属性和方法作为接口,是让我们在给定的方法里写代码实现自定义功能,做出各种各样的应用。这些方法的调用顺序最为关键,熟悉了程序运转和方法调用的顺序,才可以更好地操控程序和代码,尽量避免Xcode不报错又实现转载 2016-05-19 11:18:52 · 779 阅读 · 0 评论 -
文件锁
http://www.2cto.com/os/201109/103758.html 多用户多任务操作系统中非常重要的一个内容就是文件锁。用户在更新文件时,期望可以使用某种机制,防止两种进程同时更新文件同一区域而造成丢失,或者防止文件内容在未更新完毕时被读取等并发引起的问题,这种机制就是文件锁。 进程在操作文件期间,可以使用文件锁,锁定文件中的敏感部分,防止其他进程越权操作该部分转载 2016-05-18 18:53:00 · 531 阅读 · 0 评论 -
起底多线程同步锁(iOS)
本文为投稿文章,作者:SpringOx(博客)iOS/MacOS为多线程、共享内存(变量)提供了多种的同步解决方案(即同步锁),对于这些方案的比较,大都讨论了锁的用法以及锁操作的开销,然后就开销表现排个序。春哥以为,最优方案的选用还是看应用场景,高频接口PK低频接口、有限冲突PK激烈竞争、代码片段耗时的长短,以上都是正确选用的重要依据,不同方案在其适用范围表现各有不同。这些方案当中,除了熟转载 2016-05-18 17:41:55 · 312 阅读 · 0 评论 -
weak的生命周期:具体实现方法
我们都知道weak表示的是一个弱引用,这个引用不会增加对象的引用计数,并且在所指向的对象被释放之后,weak指针会被设置的为nil。weak引用通常是用于处理循环引用的问题,如代理及block的使用中,相对会较多的使用到weak。之前对weak的实现略有了解,知道它的一个基本的生命周期,但具体是怎么实现的,了解得不是太清晰。今天又翻了翻《Objective-C高级编程》关于__weak转载 2016-05-07 15:49:27 · 513 阅读 · 0 评论 -
nsimage 转 png ,jpg的nsdata 类型
NSImage * image = ..........;NSData *imageData = [image TIFFRepresentation];NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:imageData];[imageRep setSize:[[_imageView image] size原创 2016-05-30 13:10:59 · 5504 阅读 · 0 评论 -
ARC 的实现
怎样监控 oc 对象被release1 __weak weakObj = Obj2 重载 delloc--------------------------------------------------- ARC 的实现苹果的官方说明中称,ARC是“由编译器进行内存管理”的,但实际上只有编译器是无法完全胜任的,ARC还依赖OC运行时库,也就是说ARC是通过以下工具、库来实现转载 2016-05-05 23:36:10 · 541 阅读 · 0 评论 -
oc 类别 与 类扩展
Category在iOS开发中使用非常频繁。尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最大程度的体现了Objective-C的动态语言特性。#import@interface NSObject (Category)- (void)myMethod;@end这是一个最简单的Category,作用于NSObject转载 2016-05-05 17:04:07 · 2562 阅读 · 0 评论 -
Masonry布局框架的使用
http://www.cocoachina.com/ios/20141219/10702.html原创 2016-05-05 15:38:36 · 332 阅读 · 0 评论 -
id和instancetype区别
id、instancetypeidinstancetype总结id一个类的实例的指针,万能指针申明typedef struct objc_object *id;instancetype使用instancetype关键字作为方法的返回值代表返回当前类或者当前类的子类的实例.相应的方法有alloc,init以及便利构造方法在转载 2016-05-05 15:35:54 · 312 阅读 · 0 评论 -
NSSetUncaughtExceptionHandler
1,首先在delegate文件里面- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions函数里面添加:NSSetUncaughtExceptionHandler (&Uncaught原创 2016-04-21 11:39:15 · 554 阅读 · 0 评论 -
Objective-C消息机制的原理
http://dangpu.sinaapp.com/?p=119 在Objective-C中,message与方法的真正实现是在执行阶段绑定的,而非编译阶段。编译器会将消息发送转换成对objc_msgSend方法的调用。 objc_msgSend方法含两个必要参数:receiver、方法名(即:selector),如: [receiver message]; 将转载 2016-04-21 11:12:32 · 370 阅读 · 0 评论 -
Objective-C中一种消息处理方法performSelector: withObject:
Objective-C中调用函数的方法是“消息传递”,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候传递人和消息。 首先介绍两个方法 SEL和@selector根据AppleObjective-C Runtime Reference官方文档这个传递消息的函数就转载 2016-04-21 11:01:20 · 364 阅读 · 0 评论 -
详解objc_msgSend
【详解objc_msgSend】 1、为了性能,objc_msgSend用汇编写成。存在于objc-msg-x86_64.s中。 2、在上图代码中可以看到,objc_msgSend被分为2个过程:1)在cache中寻找SEL。2)在MethodTable寻找SEL。 3、CacheLookup中,不断地拿SEL与cache中的缓存比较,比较失败,则跳转到 LCacheMiss标转载 2016-04-21 10:57:18 · 1882 阅读 · 0 评论 -
oc 中的SEL
Objective-C在编译的时候,会根据方法的名字(包括参数序列),生成一个用 来区分这个方法的唯一的一个ID,这个ID就是SEL类型的。我们需要注意的是,只要方法的名字(包括参数序列)相同,那么它们的ID都是相同的。就是 说,不管是超类还是子类,不管是有没有超类和子类的关系,只要名字相同那么ID就是一样的。我们可以方便的通过方法的名字,获取到方法的ID也就是我们所说的SEL,反之亦然。转载 2016-04-20 07:50:57 · 1000 阅读 · 0 评论 -
CFRunLoop
Cocoa会涉及到Run Loops的系统级:GCD,mach kernel,block,pthread应用层:NSTimer,UIEvent,Autorelease,NSObject(NSDelayedPerforming),NSObject(NSThreadPerformAddition),CADisplayLink,CATransiti转载 2016-06-02 20:05:29 · 304 阅读 · 0 评论 -
Block如何避免self retain
http://stackoverflow.com/questions/3975675/objective-c-blocks-is-there-a-way-to-avoid-self-being-retained从以上的讨论中,我没没有办法让block引用参数而不导致selfretain的方法,但是提到了三种方式来实现在block中引用参数而不导致self retain的解决转载 2016-05-22 00:06:43 · 316 阅读 · 0 评论 -
iOS多线程的初步研究(七)-- dispatch对象
谈起iOS的dispatch(正式称谓是Grand Central Dispatch或GCD),不得不说这又是iOS(包括MacOSX)平台的创新,优缺点这里不讨论,只有当你使用时才能真正体会到。我们说dispatch函数的主要目的是实现多任务并发代码,那么要理解dispatch函数,先来了解dispatch对象的定义。 dispatch对象类型的部分定义,主要使用C语言的宏定义:文件转载 2016-05-22 19:50:49 · 285 阅读 · 0 评论 -
流水不腐,户枢不蠹
-26 Layer 分类在框架中定义有一些特殊的 Layer 可供使用, 这些 Layer 往往具有特定的功能:CATextLayer: 有 string 属性, 它可以自动将该属性表示的文字绘制出来. CAShapeLayer: 有 path 属性, 为 CGPath 类型, 它可以根据是否拥有 fillColor 或 strokeColor 值来决定将路径进行填充或描边, 默认无描边...原创 2019-01-10 16:42:57 · 1884 阅读 · 0 评论 -
7篇文章 弄清 OC-对象的内存
1.内存区域栈:存储局部变量 堆:允许程序员手动在堆区申请指定的连续的字节数的空间来使用 BSS段:存储未初始化的全局变量,静态变量 数据段:存储已经初始化的全局变量,静态变量,常量数据 代码段:存储程序的代码2.类加载类加载:当类第一次被访问的时候,会将类存储在代码段中。一旦类被加载到代码区,直到程序结束的时候才会被回收 参考:OC基础-06 对象在内存中的存储细节http://blog.c...原创 2018-05-23 17:54:09 · 473 阅读 · 0 评论 -
混编ObjectiveC++
转自:http://awhisper.github.io/2016/05/01/%E6%B7%B7%E7%BC%96ObjectiveC/混编ObjectiveC++ 最近有点炒冷饭的嫌疑,不过确实以前没有Git Or Blog的习惯,所以很多工作上的技术分享就存留在了电脑的文档里,现在还是想重新整理一下,再分享出来。混编C++也是以前工作中需要用到的,于是被我炒冷转载 2017-04-21 17:14:14 · 355 阅读 · 0 评论 -
深入理解Tagged Pointer
转:http://www.infoq.com/cn/articles/deep-understanding-of-tagged-pointer前言在2013年9月,苹果推出了iPhone5s,与此同时,iPhone5s配备了首个采用64位架构的A7双核处理器,为了节省内存和提高执行效率,苹果提出了Tagged Pointer的概念。对于64位程序,引入Tagged Pointe转载 2017-01-10 16:55:49 · 305 阅读 · 0 评论 -
重新认识ARC
虽然用了很久的ARC,感受了代码简洁。但是对ARC底层实现并不了解。今天抽空研究了下,做些简单地总结。一、__strong1.局部变量①.对于局部变量来说,在超出作用域的地方由编译器自动插入release。{id__strong objc = [NSObject new];}==>> (大概转化为){id objc转载 2017-01-10 14:59:41 · 258 阅读 · 0 评论 -
Nullability, __kindof,轻泛型
from:http://blog.youkuaiyun.com/majiakun1/article/details/46530245Overview自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时,也有很多像我一样工作上依然需要坚守着Objective-C 语言的开发者们。今年的转载 2016-11-21 16:44:31 · 384 阅读 · 0 评论 -
nullable、__nullable、_Nullable 究竟有什么区别呢?
在 Swift 中,我们会使用 ? 和 ! 去显式声明一个对象或者方法的参数是 optional 还是 non-optional ,而在 Objective-C 中则没有这一区分,这样就会带来一个问题:在 Swift 与Objective-C 混编时,Swift 编译器并不知道一个 Objective-C 对象或者一个方法的参数到底是 optional 还是 non-optional ,因此这转载 2016-09-07 12:24:38 · 16249 阅读 · 0 评论 -
nil、Nil、NULL、NSNull
• NULL是宏,是对于C语言指针而使用的,表示空指针• nil是宏,是对于Objective-C中的对象而使用的,表示对象为空• Nil是宏,是对于Objective-C中的类而使用的,表示类指向空• NSNull是类类型,是用于表示空的占位对象,与JS或者服务端的null类似的含意原创 2016-08-26 17:55:46 · 445 阅读 · 0 评论 -
为什么要在预编译头中加__OBJC__?
因为在一个OC工程中,可能包含.m、.mm、.c、.cpp四类编译文件,这四类文件均会引用.pch预编译头。 在编译.c,.cpp时,因为语法不兼容OC,所以预编译头中不能包含objc代码。 因为.pch是2类源文件共用的,所以在pch中,oc头文件要用__OBJC__包含起来。如下:原创 2016-04-28 19:25:47 · 444 阅读 · 0 评论 -
iOS http 怎么设置cookie
一直以为ios的http请求这块很简单应该不支持记录,保存,或者使用cookie,可是想当然归想当然,真用的时候,真研究了一下发现还真强大。经过一番的研究简单说一下我的理解:当你访问一个网站时,不管你愿意或者不愿意,NSURLRequest都会帮你主动记录下来你访问的站点设置的cookie,而且很负责任的,当你下次再访问这个站点时,NSURLRequest会拿着上次保存下来了的cookie继续去请转载 2016-04-28 19:34:15 · 757 阅读 · 0 评论 -
iOS多线程的初步研究(九)-- dispatch源
dispatch源(dispatch source)和RunLoop源概念上有些类似的地方,而且使用起来更简单。要很好地理解dispatch源,其实把它看成一种特别的生产消费模式。dispatch源好比生产的数据,当有新数据时,会自动在dispatch指定的队列(即消费队列)上运行相应地block,生产和消费同步是dispatch源会自动管理的。dispatch源的使用基本为以下步转载 2016-05-22 21:09:11 · 342 阅读 · 0 评论 -
iOS多线程的初步研究(一)-- NSThread
对于多线程的开发,iOS系统提供了多种不同的接口,先谈谈iOS多线程最基础方面的使用。产生线程的方式姑且分两类,一类是显式调用,另一类是隐式调用。一、显示调用的类为NSThread。一般构造NSThread的线程对象可通过两种方式:1. 初始化线程主方法:[NSThread detachNewThreadSelector:@selector(run:) toTarget:tar转载 2016-05-22 21:07:15 · 314 阅读 · 0 评论 -
objc category的秘密
category的真面目objc所有类和对象都是c结构体,category当然也一样,下面是runtime中category的结构:struct _category_t { const char *name; // 1 struct _class_t *cls; // 2 const struct _method_list_t *instance_methods; /转载 2016-05-14 21:49:21 · 411 阅读 · 0 评论 -
Objective-C @encode关键字
如果把一些数(int ,BOOL类型等)封装到NSNumber对象中,而这些NSNumber类型的数据又再放到一个字典当中,循环字典元素,取出每一个NSNumber类型的对象,如何才能够知道NSNumber对象中放的是什么类型的数(int ,BOOL类型等)?因为之前了解过,NSNumber是工厂方法设计模式使用的典范(NSNumber类是抽象父类,每一种数类型肯定会包含一个具转载 2016-04-10 09:54:42 · 317 阅读 · 0 评论 -
IOS NSInvocation应用与理解
IOS中有一个类型是SEL,它的作用很相似与函数指针,通过performSelector:withObject:函数可以直接调用这个消息。但是perform相关的这些函数,有一个局限性,其参数数量不能超过2个,否则要做很麻烦的处理,与之相对,NSInvocation也是一种消息调用的方法,并且它的参数没有限制。这两种直接调用对象消息的方法,在IOS4.0之后,大多被block结构所取代,只有在很老转载 2016-04-10 09:49:19 · 460 阅读 · 0 评论 -
函数调用
Objective-C是一门动态语言,一个函数是由一个selector(SEL),和一个implement(IML)组成的。Selector相当于门牌号,而Implement才是真正的住户(函数实现)。和现实生活一样,门牌可以随便发(@selector(XXX)),但是不一定都找得到住户,如果找不到系统会给程序几次机会来程序正常运行,实在没出路了才会抛出异常。下图是objc_msgSend转载 2016-04-10 09:18:25 · 288 阅读 · 0 评论 -
@synthesize和@dynamic区别
在声明property属性后,有2种实现选择@synthesize(1)编译器期间,让编译器自动生成getter/setter方法。(2)当有自定义的存或取方法时,自定义会屏蔽自动生成该方法 @dynamic(1)告诉编译器,不自动生成getter/setter方法,避免编译期间产生警告然后由自己实现存取方法(2)或存取方法在运行时动态创建绑定:主要使用在CoreD原创 2016-04-10 09:15:43 · 238 阅读 · 0 评论 -
Objective-C method及相关方法分析
## Objective-C method及相关方法分析转载请注名出处 [http://blog.youkuaiyun.com/uxyheaven](http://blog.youkuaiyun.com/uxyheaven/article/details/38120335)本篇文章将探究一下objc里的关于方法的函数是如何实现的首先看下方法的定义, Method 是一个objc_method结构体转载 2016-04-09 23:02:52 · 925 阅读 · 0 评论 -
block 定义
1.声明和定义在一起int (^ block1) (int ,int )= ^(int a, int b){ retrun a+b;}2.声明和定义分开int (^ block1) (int ,int );block1 = ^(int a, int b){ retrun a+b;}3.调用int m原创 2016-04-09 13:26:04 · 309 阅读 · 0 评论 -
谈Objective-C Block的实现
转自唐巧的博客前言这里有关于block的5道测试题,建议你阅读本文之前先做一下测试。 先介绍一下什么是闭包。在wikipedia上,闭包的定义)是: In programming languages, a closure is a function or reference to a function together with a referenc转载 2016-02-20 15:31:39 · 409 阅读 · 0 评论 -
ARC和非ARC下使用Block属性的问题
1. Block的声明和线程安全Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC下返回Block)。另一个需要注意的问题是关于线程安全,在声明Block属性时需要确认“在调用Block时另一个线程有没有可能去修改Block?”这个问题,如果确定不会有这种情况发生的转载 2016-04-12 10:44:43 · 334 阅读 · 0 评论 -
block为什么用copy
block为什么用copy? (1)block- (void)viewDidLoad { [super viewDidLoad]; __block int a=10; NSLog(@"a=%d",a); void (^blockName)()=^{ a=20; };转载 2016-04-11 23:26:25 · 825 阅读 · 0 评论 -
+(void)load与+(void)initialize
+(void)load+(void)initialize执行时机在程序运行后立即执行在类的方法第一次被调时执行若自身未定义,是否沿用父类的方法?否是类别中的定义全都执行,但后于类中的方法覆盖类中的方法,只执行一个原创 2016-04-07 18:48:32 · 548 阅读 · 0 评论