objc_object 与 NSObject】的更多相关文章

objc_object 与 NSObject:同一个事物的不同表现形式.…
一些iOS面试基础题总结 目录 多线程 AutoLayout objc_msgSend Runtime 消息转发 Category NSObject 与 objc_class Runloop AutoreleasePool iOS系统架构 App启动过程和优化 UIScrollView 的代理方法 响应链和事件传递 UIView 和 CALayer 的区别和联系 轮播图朴素实现的几种方法 TableView 和 CollectionView 必选的代理方法 UITableView 的优化思路 多…
以前对NSObject的isa属性也知道点,但是了解不深,今天看了这篇博文,感觉很好,总结一下: http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime-(2)%5Bnil%5D-object-and-class-and-meta-class/ 先把里面最重要的图贴上: 我们在看看几个重要的定义: /// An opaque type that represents an Objective-C cl…
NSObject头文件解析 当我们需要自定义类都会创建一个NSObject子类, 比如: #import <Foundation/Foundation.h> @interface ClassA : NSObject @end 那么NSObject里面具体有什么呢? 我们点到它的头文件里面去看看 @interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; //每个NSObject对象都拥有一个Class类作为成员…
首先,我们都知道NSObject是大多数类的根类,但是,这个类的是怎么实现的呢?我们可以去下载开源的Runtime源码,探究下NSObject类的实现. 1. NSObject.h文件 我们可以直接使用Command点NSOject进去看到它的头文件,可以看到,NSObject.h文件中有两块内容: NSObject 协议 NSObject 实现 1.1 NSObject 协议 @protocol NSObject - (BOOL)isEqual:(id)object; @property (r…
转自:http://blog.csdn.net/happytengfei/article/details/11473931 我们经常会混淆以下三种申明(我是没有留意过):    1. id foo1;    2. NSObject *foo2;    3. id<NSObject> foo3; 第一种是最常用的,它简单地申明了指向对象的指针,没有给编译器任何类型信息,因此,编译器不会做类型检查.但也因为是这样,你可以发送任何信息给id类型的对象.这就是为什么+alloc返回id类型,但调用[[…
好了,之前的博文中详细的解释了一些辅助的类和辅助的函数,接下来就是使用它们来实现酷炫功能的时候,正所谓磨刀不误砍柴工啊 我们先把总的功能罗列出来 1. json转字典              + (NSDictionary *)_yy_dictionaryWithJSON:(id)json 2. json转模型              + (instancetype)yy_modelWithJSON:(id)json 3. 字典转模型              + (instancetype…
接下来我们继续向下看 typedef struct { void *modelMeta; ///< _YYModelMeta void *model; ///< id (self) void *dictionary; ///< NSDictionary (json) } ModelSetContext; 这是一个c的结构体,在c中 void * 相当于 oc 中的 id 类型 那么 为什么使用c的结构体呢,最主要的使用场景就是我们需要同时使用多个参数的情况下,可以使用c的结构体 /**…
本篇主要介绍的是 在真正转之前的几个辅助函数 /** Get number from property. @discussion Caller should hold strong reference to the parameters before this function returns. @param model Should not be nil. @param meta Should not be nil, meta.isCNumber should be YES, meta.get…
_YYModelMeta   这个内部的类主要是对这个类的描述.包含了和此类转换相关的数据. /// A class info in object model. @interface _YYModelMeta : NSObject { @package YYClassInfo *_classInfo; /// Key:mapped key and key path, Value:_YYModelPropertyMeta. NSDictionary *_mapper; /// Array<_YYM…
本篇文章主要介绍 _YYModelPropertyMeta 前边的内容 首先先解释一下前边的辅助函数和枚举变量,在写一个功能的时候,这些辅助的东西可能不是一开始就能想出来的,应该是在后续的编码过程中 逐步添加的. #define force_inline __inline__ __attribute__((always_inline)) 这行代码用到了C语言的内联函数 内联函数: 是用inline修饰的函数,内联函数在代码层次看和普通的函数结构一样,却不具备函数的性质,内联函数不是在调用时发生控…
经常发现在一些需要使用消息转发而创建代理类时, 不同的程序员都有着不同的使用方法, 有些采用继承于NSObject, 而有一些采用继承自NSProxy. 二者都是Foundation框架中的基类, 并且都实现了<NSObject>这个接口, 从命名和文档中看NSProxy天生就是用来干这个事情的. 但即便如此, 它们却都定义了相同的消息转发的接口, 那我们在使用二者来完成这个工作时有什么差异呢. 先贴一下通过二者来创建代理类的最基本实现代码. 继承自NSProxy 12345678910111…
iOS 杂笔-24(常用类到NSObject的继承列表) NSString NSObject->NSString NSArray NSObject->NSArray ↑OC基本类都直接继承自NSObject↑ UIView NSObject->UIResponder->UIView UIImage NSObject->UIImage NSObject NSObject->NSObject UITableView NSObject->UIResponder->…
@interface NSFileManager : NSObject NSFileManager操作: 1.文件夹创建删除 2.文件创建删除 3.清除数据缓存 以上办法都在这里:https://developer.apple.com/library/mac/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/AccessingFilesandDirectories/AccessingFilesandDirecto…
区别: Thread: 是这几种方式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步.线程共享同一应用程序的部分内存空间, 它们拥有对数据相同的访问权限.你得协调多个线程对同一数据的访问,一般做法是在访问之前加锁,这会导致一定的性能开销.在 iOS 中我们可以使用多种形式的 thread. Cocoa threads(NSObject): 使用 NSThread 或直接从 NSObject 的类方法 performSelectorInBackgrou…
函数调用 Objective-C是一门动态语言,一个函数是由一个selector(SEL),和一个implement(IML)组成的.Selector相当于门牌号,而Implement才是真正的住户(函数实现). 和现实生活一样,门牌可以随便发(@selector(XXX)),但是不一定都找得到住户,如果找不到系统会给程序几次机会来程序正常运行,实在没出路了才会抛出异常.下图是objc_msgSend调用时,查找SEL的IML的过程.咱们以这个流程为例看看其中涉及的很有用的函数. 图:运行时查找…
1.id和instancetype都能省去具体类型,提高代码的通用性.而NSObject *则没有这种功能. 2.instancetype只能用于方法的返回类型,而id用处和NSObject *类似. 3.instancetype会告诉编译器当前的类型,这点和NSObject *类似,但id对于编译器却是无类型的,调用任何方法不会给出错误提示. 4.对于init方法,id和instancetype是没有区别的.因为编译器会把id优化成instancetype.当明确返回的类型就是当前Class时…
全文转载自:http://www.cocoachina.com/ios/20150104/10826.html 在Objective-C中,NSObject是根类,而NSObject.h的头文件中前两个方法就是load和initialize两个类方法,本篇文章就对这两个方法做下说明和整理. 1.概述 Objective-C作为一门面向对象语言,有类和对象的概念.编译后,类相关的数据结构会保留在目标文件中,在运行时得到解析和使用. 在应用程序运行起来的时候,类的信息会有加载和初始化过程.其实在Ja…
#pragma mark - NSThread实现多线程 /* // 获取当前线程 NSLog(@"currentThread = %@", [NSThread currentThread]); // 获取主线程 NSLog(@"mainThread = %@", [NSThread mainThread]); // 判断当前线程是否为主线程 NSLog(@"isMainThread = %d", [NSThread isMainThread])…
利用NSUserdefaults来存储自定义的NSObject类及自定义类数组 1.利用NSUserdefaults来存储自定义的NSObject类 利用NSUserdefaults也可以来存储及获取自定义非框架类对象,不过自定义的NSObject类需要实现NSCoding协议(包含2个必须实现的方法).存储过程是将自定义的NSObject转换成NSData存储. 存储:NSData *data = [NSKeyedArchiver archivedDataWithRootObject:obje…
1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 2.NSOperation/NSOperationQueue 面向对象的线程技术 3.GCD —— Grand Central Dispatch(派发) 是基于C语言的框架,可以充分利用多核,是苹果推荐使用的多线程技术 以上这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的.但是就目…
NSObject是所有类的基类,其常见用法有: #import <Foundation/Foundation.h> @interface Person : NSObject - (void)test; @end #import "Person.h" @implementation Person - (void)test { NSLog(@"调用了Person的test方法"); } @end #import "Person.h" @i…
我用的是Xcode6.2. 系统默认没有pch文件. 所以没有自动导入UIKit包. 我在继承NSObject类里也不能用CGRect或者UI开头的控件,原因也是Xcode6.2以后版本 缺少UIKit 框架,引入框架就可以用了 在你的XXXXX.h 文件里面 导入#import <UIKit/UIKit.h>…
1 重构Student和Book类 1.1 问题 本案例需要创建一个Book类,类中有一个整型price属性,用于记录书的价格.还需要创建一个Student类,类中有两个带参属性,它们是整型的年龄age和类Book类型的book,分别用于存储学生的年龄和学生正在学习的书,book属性带有copy参数,并且有一个study方法,用于显示年龄为age的学生学习价格为book.price的书. 在主程序中创建Student类的一个对象和Book类的两个对象,首先让Student类的对象拥有一个Book…
NSObject常用方法 - (BOOL)isKindOfClass:(Class)aClass //判断是否为aClass或者aClass的子类的实例,aClass可以通过[类名 class]获取 - (BOOL)isMemberOfClass:(Class)aClass //判断是否为aClass的实例(不包括aClass的子类) - (BOOL)conformsToProtocol:(Protocol)aProtocol //判断对象是否实现了aProtocol协议 + (BOOL)ins…
注:OC中数组和字典只能存储OC对象不能存放基本数据类型. NSNumber NSNumber可以用来把一个基本数据类型包装成一个NSNumber类型的对象. NSNumber *number = [NSNumber numberWithInt:]; // 将int类型的10 包装成一个NSNumber对象. NSLog(@"number=%@", number);//NSNumber类型对象可以当作字符串直接输出. NSMutableArray *array = [NSMutable…
前一篇文章讲到了OC中的代理模式,而且前几篇文章就介绍了OC中的类相关知识,从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套api,和Java中的一些系统jar很相似,又早起的一批人开发的,内部有很多现有的类和功能提供给我们使用.那么今天首先来介绍一下Foundation框架中的第一个类NSObject. 在之前介绍了类的相关知识,我们看到我们自定义的类都必须实现NSObject类,这个类内部有很多现有的方法可以供我们使用…
在上一篇文章中介绍了 FBRetainCycleDetector 的基本工作原理,这一篇文章中我们开始分析它是如何从每一个对象中获得它持有的强指针的. 如果没有看第一篇文章这里还是最好看一下,了解一下 FBRetainCycleDetector的工作原理,如何在 iOS 中解决循环引用的问题. http://t.cn/RtJsLG0 FBRetainCycleDetector 获取对象的强指针是通过 FBObjectiveCObject 类的 - allRetainedObjects 方法,这一…
oc中NSObject类是所有类的基类,所有类都要继承自它,那么它的方法就显得特别重要,因为所有类都会有这些基本的方法. 看看oc的源码中NSObject是这样定义的: @interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; } 可以看出,它实现了NSObject协议,下面我们来看看NSObject协议中定义的方法和属性.顺便将它归类为7大类 @protocol NSObject //*****1.识别类***** @…
首先看一下NSObject的定义: @interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; } 官方解释:Every object has an isa instance variable that identifies the object's class. The runtime uses this pointer to determine the actual class of the object when i…