object c基础
绿叶清风
这个作者很懒,什么都没留下…
展开
-
Objective C 和 Javascript 之间的互相调用
有些时候出于某些原因(web界面更新迭代快、工作分离),我们需要让手机里面的网页能调用Objective C的原生代码或者是反过来。 所以这时候就需要解决Objective C 和 页面代码(一般就是Javascript)之间互相调用、通信的问题了。那么, 首先我们从简单的方面开始讲吧,Objective C如何调用Javascript代码Objective C如何调用Javascri原创 2016-06-08 17:55:50 · 1271 阅读 · 0 评论 -
Objective-C Runtime 运行时之三:方法与消息
前面我们讨论了Runtime中对类和对象的处理,及对成员变量与属性的处理。这一章,我们就要开始讨论Runtime中最有意思的一部分:消息处理机制。我们将详细讨论消息的发送及消息的转发。不过在讨论消息之前,我们先来了解一下与方法相关的一些内容。基础数据类型SELSEL又叫选择器,是表示一个方法的selector的指针,其定义如下:typedef struct objc_selec转载 2015-06-05 11:34:44 · 736 阅读 · 0 评论 -
NSKeyValueObserving(KVO)
NSKeyValueObserving非正式协议定义了一种机制,它允许对象去监听其它对象的某个属性的修改。我们可以监听一个对象的属性,包括简单属性,一对一的关系,和一对多的关系。一对多关系的监听者会被告知集合变更的类型,以及哪些对象参与了变化。NSObject提供了一个NSKeyValueObserving协议的默认实现,它为所有对象提供了一种自动发送修改通知的能力。我们可以通过禁用自动发转载 2015-06-05 11:58:35 · 768 阅读 · 0 评论 -
Objective-C Runtime 运行时之六:拾遗
前面几篇基本介绍了runtime中的大部分功能,包括对类与对象、成员变量与属性、方法与消息、分类与协议的处理。runtime大部分的功能都是围绕这几点来实现的。本章的内容并不算重点,主要针对前文中对Objective-C Runtime Reference内容遗漏的地方做些补充。当然这并不能包含所有的内容。runtime还有许多内容,需要读者去研究发现。super在Objective-转载 2015-06-05 11:44:05 · 542 阅读 · 0 评论 -
Objective-C Runtime 运行时之五:协议与分类
Objective-C中的分类允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到。Objective-C中的协议是普遍存在的接口定义方式,即在一个类中通过@protocol定义接口,在另外类中实现接口,这种接口定义方式也成为“delegation”模式,@protocol声明了可以呗其他任何方法类实现的方法,协议仅仅是定转载 2015-06-05 11:38:53 · 614 阅读 · 0 评论 -
Objective-C Runtime 运行时之四:Method Swizzling
理解Method Swizzling是学习runtime机制的一个很好的机会。在此不多做整理,仅翻译由Mattt Thompson发表于nshipster的Method Swizzling一文。Method Swizzling是改变一个selector的实际实现的技术。通过这一技术,我们可以在运行时通过修改类的分发表中selector对应的函数,来修改方法的实现。例如,我们想跟踪在程序中每转载 2015-06-05 11:37:40 · 456 阅读 · 0 评论 -
Objective-C Runtime 运行时之二:成员变量与属性
在前面一篇文章中,我们介绍了Runtime中与类和对象相关的内容,从这章开始,我们将讨论类实现细节相关的内容,主要包括类中成员变量,属性,方法,协议与分类的实现。本章的主要内容将聚集在Runtime对成员变量与属性的处理。在讨论之前,我们先介绍一个重要的概念:类型编码。类型编码(Type Encoding)作为对Runtime的补充,编译器将每个方法的返回值和参数类型编码为一个字符串,转载 2015-06-05 11:24:33 · 526 阅读 · 0 评论 -
Objective-C Runtime 运行时之一:类与对象
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工作可以转载 2015-06-05 11:13:39 · 973 阅读 · 0 评论 -
oc block链式编程
利用block实现链式编程@interface Person : NSObject- (Person *(^)(NSString *name))study;- (Person *(^)())run;@end#import "Person.h"@implementation Person- (Person *(^)(NSString *))study{原创 2015-05-13 23:58:28 · 693 阅读 · 0 评论 -
oc 打印二进制
最近搞tcp需要按位传输,整了个工具方法查询二进制/// length待打印长度-(void)bytearrtostr:(Byte *)data length:(int)length{ char char_1 = '1',char_0 = '0'; char *chars = malloc(length*8+1); chars[length*8] = '\n';原创 2015-05-11 11:15:21 · 1791 阅读 · 0 评论 -
Objective-C中的instancetype和id区别
有一个相同两个不同。相同Written by Mattt Thompson on Dec 10th, 2012Objective-C is a rapidly evolving language, in a way that you just don't see in established programming languages. ARC, object literals原创 2015-06-08 18:36:29 · 655 阅读 · 0 评论 -
谈ObjC对象的两段构造模式
Objective-c语言在申请对象的时,需要使用两段构造(Two Stage Creation)的模式。一个对象的创建,需要先调用alloc方法或allocWithZone方法,再调用init方法或initWithSomething方法。如下是一个NSString对象的创建示例:NSString * str = [[NSString alloc] initWithString:@"http:转载 2015-06-08 10:15:28 · 585 阅读 · 0 评论 -
ios 学习资料
中文网站系列 objcio.cncocoachina.comcode4app.com泰然网 博客系列唐巧地球人都知道哈。http://blog.devtang.com/巧哥新出书了,速度入手吧。 虾神地球人都知道系列二。http://blog.txx.im/?from=inf&wvr=5&loc=infblog(话说你们晓得虾神年纪多大么?反原创 2015-06-05 13:01:15 · 3486 阅读 · 0 评论 -
iOS分类(Category)和类扩展(Extension)的简单区别
一、分类1.1 分类简介• 分类只能增加方法, 不能增加成员变量、@property(可能编译不报错,但是运行有问题) • 分类可以访问原来类中的成员变量 • 如果分类和原来类出现同名的方法, 优先调用分类中的方法, 原来类中的方法会被忽略 • 方法调用的优先级(从高到低) ➢ 分类(最后参与编译的分类优先),只要有分类就优先调用分类,不考虑与主类的编译顺序。 ➢ 原来原创 2016-02-19 10:18:36 · 1266 阅读 · 0 评论 -
深入理解RunLoop
转自:http://blog.ibireme.com/2015/05/18/runloop/RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中,苹果是如何利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。Index转载 2016-02-16 10:47:33 · 702 阅读 · 0 评论 -
iOS内存管理和malloc源码解读
出自:https://yq.aliyun.com/articles/3065摘要最近由于排查问题,顺便对iOS的内存管理,尤其是malloc库稍微深入地了解一下,在这里整理出来,和大家分享一下。0. iOS内存基本原理在接触iOS开发的时候,我们都知道“引用计数”的概念,也知道ARC和MRR,但其实这仅仅是对堆内存上对象的内存管理。用WWDC某Session里的话说,这转载 2016-02-16 10:41:46 · 2435 阅读 · 0 评论 -
iOS小数点格式化:如果有两位小数不为0则保留两位小数,如果有一位小数不为0则保留一位小数,否则显示整数
- (NSString *)formatFloat:(float)f{ if (fmodf(f, 1)==0) {//如果有一位小数点 return [NSString stringWithFormat:@"%.0f",f]; } else if (fmodf(f*10, 1)==0) {//如果有两位小数点 return [NSString st原创 2016-01-07 20:23:35 · 6030 阅读 · 1 评论 -
ios NSNotificationCenter 的简单使用
NSNotificationCenter的作用:用于程序中不同类间的消息通信,使用步骤如下:1,发送通知, NSDictionary *objects = @{};//用字典存放发送通知的内容 [[NSNotificationCenter defaultCenter] postNotificationName:@"idstring" object:self userInf原创 2015-07-31 13:46:12 · 650 阅读 · 0 评论 -
ios根据日期获取年月日分秒及常用操作(问题)
//获取当前时间 NSDate *now = [NSDate date]; NSLog(@"now date is: %@", now); NSCalendar *calendar = [NSCalendar currentCalendar]; NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalen原创 2015-08-19 09:48:33 · 2216 阅读 · 0 评论 -
ios输出整数占位符
int startHour=5; int startMinute=4; //输出前面补0,不管你输入的数据前面有没有0 NSLog(@"====>%@",[NSString stringWithFormat:@"%02d:%02d",startHour,startMinute]);原创 2015-08-18 18:50:09 · 2333 阅读 · 0 评论 -
object-c 利用rnntime机制归档任意对象
+(id)shareInstaceWithArray:(NSArray *)array{ if (array==nil&&instance==nil) { instance = [[self alloc] init]; NSString *homeDictionary = NSHomeDirectory();//获取根目录 NSString原创 2015-07-24 00:22:50 · 638 阅读 · 0 评论 -
object-c利用头文件实现能用单例
单例头文件:// 帮助实现单例设计模式// .h文件的实现#define SingletonH(methodName) + (instancetype)shared##methodName;// .m文件的实现#if __has_feature(objc_arc) // 是ARC#define SingletonM(methodName) \static id _instace原创 2015-07-28 11:28:39 · 709 阅读 · 0 评论 -
利用宏实现单例(在宏中写实现方法)
声明和实现:[objc] view plaincopyprint?#undef AS_SINGLETON #define AS_SINGLETON( __class ) \ - (__class *)sharedInstance; \ + (__class *)sharedInstance;原创 2015-04-25 23:13:13 · 713 阅读 · 0 评论 -
面试相关
1. 怎么保证多人开发进行内存泄露的检查.1> 非ARC可以使用使用Analyze进行代码的静态分析(xcode-->product-->analyze:蓝色表示建议)2> 为避免不必要的麻烦, 多人开发时尽量使用ARC单例设计相关:1.单例设计模式(Singleton) 什么: 它可以保证某个类创建出来的对象永远只有1个 作用(为什么要用): 节省内存开销; 如果有一些数原创 2015-04-26 00:29:51 · 609 阅读 · 0 评论 -
将oc转成cpp
clang -rewrite-objc main.m原创 2015-04-20 22:06:17 · 913 阅读 · 0 评论 -
Catagory用法
Object-C中的Category其实是一种对于类的方法的扩充,有些类似于类的继承,但是和继承还是不一样的。下面我们通过一个例子还说明一个OC中的Category的不同。首先是.h文件,一般的命名规范为这样NSString+ReverseString.h,具体的代码如下[cpp] view plaincopyprint?// // NSString+R原创 2014-05-12 08:48:48 · 1245 阅读 · 0 评论 -
@class的含义
在Objective-c中,当一个类需要引用另一个类,即建立复合关系的时候,需要在类的头文件中建立被引用类的指针原创 2014-05-12 08:32:14 · 2132 阅读 · 0 评论 -
ios nil、NULL和NSNull 的使用
nil用来给对象赋值(Objective-C中的任何对象都属于id类型),NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在Objective-C中类是一个对象,是类的meta-class的实例), 而NSNull则用于集合操作,虽然它们表示的都是空值,但使用的场合完全不同。示例如下:id object = nil; // 判断对象不为空 if原创 2014-05-19 09:36:32 · 858 阅读 · 0 评论 -
NSvalue 详解
IOS中的可变数组NSMutableArray里面存放的内容需要是NSObject以及所有基于NSObject类的对象,如果有C/C++中定义的标准类型如int需要存放在NSMutableArray就要进行对应的转换。int型我们可以使用NSNumber转换,而如果需要将struct结构存放在NSMutableArray,该如何处理呢?这种情况我们需要借助IOS中的NSValue对象。情景原创 2014-05-19 09:29:35 · 1627 阅读 · 0 评论 -
object c NSNumber
//创建NSNumber类型的对象NSNumber*intNumber=[[NSNumber alloc]initWithInt:100];NSNumber*intNumber2=[NSNumber alloc]initWithInt:102];NSNumber*floatNumber=[NSNumber alloc]initWithfloat:100.00f];NSNumber*原创 2014-05-19 09:15:18 · 993 阅读 · 0 评论 -
object-c 复制 (copy)
深拷贝,和前拷贝,是一项非常重要的知识点。尤其,实际应用中,用来拷贝对象时。默认的,对象、对象数组用的是浅拷贝。我们从一段代码开始吧!需要参照的实体类: NSString *aName=[[NSString alloc] initWithString:@"Tom"]; NSString *aEmail=[[NSStringalloc]原创 2014-05-19 09:01:44 · 1450 阅读 · 0 评论 -
oc protocol 的使用方法(相当于java的接口)
类似Java的泛型与接口的结合体,用于类型的协议)1、定义协议@protocol Client -(void)defaultMethod;//默认必须实现@required//必须-(void)required;@optional//可选-(void)optional;@end 2、符合(实现)协议#import "Client.h"@interface JackClient :原创 2014-05-10 03:07:07 · 2174 阅读 · 0 评论 -
oc 利用retain关键字自动管理内存
@protperty(retain) 类名 * 对象 :表示在set方法中,release原创 2014-05-10 02:13:38 · 969 阅读 · 0 评论 -
分类关于扩展
1、分类(category)使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到,这点和javascript中使用原型来定义属性有点类似。我们可以为一个类创建一个新的方法,而不需要在代码中编辑类定义。下面就是定义并使用分类的例子程序,通过下面代码,我们可以给Obje原创 2014-05-07 14:42:06 · 662 阅读 · 0 评论 -
Block用法
Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值。Block实体形式如下:^(传入参数列){行为主体};Block实体开头是“^”,接着是由小括号所包起来的参数列(比如 int a, int b, int c),行为主体由大括号包起来,专有名字叫做block literal。行为主体可以用return回传值,类型会被compiler自动辨别。如果没原创 2014-05-12 08:56:13 · 857 阅读 · 0 评论 -
property
什么是property?property是一种代码生成机制,能够生成不同类型的getter/setter函数,特别是如果你想要用点(.)操作符号来存取变量的话,你就能必须使用property。 如何使用?用法如:@property (attribute1,attribute2) float value; 这些attribute包括:readonly-只读,只原创 2014-05-12 08:34:46 · 770 阅读 · 0 评论 -
Objective-C内存管理教程和原理剖析(四)系统自动创建新的autorelease pool
四 系统自动创建新的autorelease pool在生成新的Run Loop的时候,系统会自动创建新的autorelease pool(非常感谢网友hhyytt和neogui的提醒)。注意,此处不同于xcode在新建项目时自动生成的代码中加入的autorelease pool,xcode生成的代码可以被删除,但系统自动创建的新的autorelease pool是无法删除的(对于无Garb原创 2014-05-13 08:50:26 · 730 阅读 · 0 评论 -
ios 得用代理反向传值
应用场景:有时时候从界面A跳转到界面B,界面B在返回的时候需要将处理的结果传递给A. 实现思路:1,定义一个负责传值的协义,界面A拥有该协义属性,并实现该协义中的方法 2,界面B也拥有该协义属性(代理要求两者都具有相同对象的引用 ),然后在返回的时候获取界面A的引用指针,并且指定B中协义的调用目标为A,调用协义中的传值方法. 具体代码:原创 2014-08-04 09:34:21 · 1712 阅读 · 0 评论 -
ios 解析json常见的四种方法
作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式。有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验(点击打开链接)。此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便。从IOS5开始,APPLE提供了对json的原生支持(NSJSONSerial原创 2014-05-26 14:35:14 · 891 阅读 · 0 评论 -
ios get post请求
1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行3、GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;4、POST请求,将参数放到body里面。POST原创 2014-05-26 14:42:42 · 735 阅读 · 0 评论