首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Objective-c 知识总结 -- @property

,需手动实现;声明实例变量,因为它是类变量;【iOS 10, Xcode 8】 空类 nonnull 不能为空【iOS 9, Xcode 7】 —— nullable 可以为空【iOS 9, Xcode...属性访问方式 访问方式有: 通过直接使用实例变量 使用编译器提供点运算符,实现属性存取方法调用,从而间接使用实例变量; 注意:id 类型变量不能使用点操作符进行访问,原因 Xcode 不知道是否存在对应存取方法...,属性错误就可以修复了; 当然 age 那个错误可以直接忽略,因为压根就不会有出现; 当然如果只手动做一个方法实现: ?...类属性关键字解析【 OC 新增】 class 关键字表示定义变量类变量,就是元类变量; 那么相应地,存取方法当然就是类方法了; 永远不会自动合成,所以类变量、类存取方法,都要自己手动实现;...* * @return 一个 C 类型指针数组 * 其它采纳了此协议协议里面的属性声明不会包含在这里.

1.3K31

神奇Runtime

objc_class {       struct objc_class *isa; //指向该对象所属类型类型对象(Class Object),而类isa指针指向metaclass...标志位不同可能指向不同,比如可能指向实例方法列表,或者指向类方法列表      struct objc_cache *cache;   //因为Objective-C消息转发需要查找dispatch...通过这种方法来模拟生成属性,但是与对象还是有点区别,因为对象属性会编译器自动生成setter和getter方法,会默认给你生成一个以下划线开头成员变量,而category手动去生成setter和getter...当Objective-C编译器去处理实现一个方法时候,就会指向一个IMP对象,这个对象是C语言表述类型。...:获取协议列表 class_addIvar:添加成员变量(添加成员变量只能在运行时创建类,且不能为元类) class_addProperty:添加属性 class_addMethod:添加方法 class_addProtocol

59920
您找到你想要的搜索结果了吗?
是的
没有找到

Objective-C RunTime概览

of `struct objc_class *` */ 这个结构体,包括:isa指针、父类指针、类名、成员变量、方法列表、缓存以及协议列表等。...; objc_method结构体存储了方法名、方法类型方法实现。...Method:表示一个方法,本质一个指向objc_method结构体指针。 SEL(Selector):在运行时用来代表一个方法名字。...而super不是隐藏参数,一个「编译器标示符」,告诉编译器,调用父类方法,而不是本类方法。但是,这时候实际上消息接收者,还是self。...in categories 但是可以为Category添加属性,也可以自定义setter、getter,外部也可以访问;但是,这个属性无意义因为不能保存数据(可以返回值,但是不能赋值)。

64330

iOS开发·runtime原理与实践: 基本知识篇(类,超类,元类,super_class,isa,对象,方法,SEL,IMP)

以上你可能看不出价值,但是我们需要了解 Objective-C 一门动态语言,它会将一些工作放在代码运行时才处理而并非编译时。...① 类 类对象(Class)由程序员定义并在运行时由编译器创建没有自己实例变量,这里需要注意成员变量和实例方法列表属于实例对象,但其存储于类对象当中。...objc_class *Class; 可以看到类由Class类型表示,它是一个objc_class结构类型指针。...Objective-C方法使用元类根本原因,因为其中存储着对应类对象调用方法即类方法。...需要注意,指针可能NULL,表示这个缓存bucket没有被占用,另外被占用bucket可能连续。这个数组可能会随着时间而增长。

1.5K40

Objective-C Runtime:深入理解类与对象

} OBJC2_UNAVAILABLE; 在Objective-C中类由Class表示,Class一个指向struct objc_class指针。...这个数组可能包含超过mask+1个元素。需要注意,指针可能NULL,表示这个缓存bucket没有被占用。另外被占用bucket可能连续。这个数组可能会随着时间而增长。...我们常见id一个struct objc_object类型指针。id类型对象可以转换为任何一种类型对象,作用有点类似 C 语言中 void * 指针类型。...如果变量类型指针类型,则传递log2(sizeof(pointer_type)); class_copyIvarList函数,返回一个指向成员变量信息数组,数组中每个元素指向该成员变量信息objc_ivar...一个Objective-C方法一个简单C函数,至少包含两个参数self和_cmd。

1.2K40

Objective-C Runtime:深入理解成员变量与属性

在本文中,着重讲解一下类实现细节先关内容,主要包括类中成员变量、属性、方法以及协议与分类实现。 在讲解成员变量与属性之前,需要了解一下类型编码相关知识。...类型编码 在Runtime中,编译器将每个方法返回值和参数类型编码为一个字符串,并将其与方法selector关联在一起。...需要注意这些类型很多是与我们用于存档和分发编码类型相同。但有一些不能在存档时使用,如下所示: 注意:Objective-C不支持long double类型。...基础数据结构 成员变量(Ivar)数据结构 在Objective-C中,成员变量即Ivar类型指向结构体struct objc_ivar指针,在Objc/runtime.h 中查到,如下所示:...这里有几点需要注意: 我们不能用 class_addIvar() 函数为一个已经存在类添加Ivar,并且 class_addIvar() 只能在 objc_allocateClassPair() 和

75430

swift4.0语法杂记(精简版)

五、可选类型Objective-C开发中,如果一个变量暂时不会使用到,可以将它赋值为0或者赋值为空,而在swift中,nil一个特殊类型,如果和真实类型匹配不能进行赋值。...在前面的教程中提到过,不同类型不能直接运算。而可选项有两种值产生,若值为nil则不能参加计算。 因此引入解包概念,“!”代表强制解包。意思从可选值中强行获取对应非空值。...2、表示区间 swift常见区间有两种,开区间用..<表示,闭区间用...表示。要注意数字和省略号之间不能加空格。...绝对不能用相加方式对字典进行合并。...因为没有考虑到枚举类全部成员。如果说不需要匹配所有的枚举成员,可以提供一个default分支来涵盖其他未明确处理枚举成员

15.3K90

runtime

objc_protocol_list *protocols; }; 可以看到Objective-C对象系统基石:struct objc_class结构如下: isa指针:指向该对象所属类型类型对象...在Objective-C中,类也是用对象来表示,而类isa指针指向metaclass(存储静态成员变量和类方法)。 super_class指针:指向父类。 name:类名称。...cache:因为Objective-C消息转发需要查找dispatch table甚至可能需要遍历继承体系,所以缓存最近使用方法。 protocols:类需要遵守协议。...7、isa 指针 isa 指针当你向对象发送消息时,Objective-C Runtime 检查一个对象并且查看类是什么然后开始查看它是否响应这些 selectors 所需要一切。...更确切地说,id指向Class类型指针,而Class又是指向struct objc_class结构指针。

64720

面经之《招聘一个靠谱iOS》import CYLBlockExecutor.himport CYLBlockExecutor.himport CYLNSObject+RunAtDeallo

遗留下来“传统”,在 MRC 中,方法内部 block 在栈区,使用 copy 可以把放到堆区.在 ARC 中写写都行:对于 block 使用 copy 还是 strong 效果一样,...这个类 NSString 子类,表示一种可修改其值字符串,此时若是拷贝字符串,那么设置完属性之后,字符串值就可能会在对象不知情情况下遭人更改。...这个类 NSString 子类,表示一种可修改其值字符串,此时若是拷贝字符串,那么设置完属性之后,字符串值就可能会在对象不知情情况下遭人更改。...第二个成员 (id)class_getSuperclass(objc_getClass(“Son”)) , 实际该函数输出结果为 Father。...类方法: 类方法属于类对象方法只能通过类对象调用 类方法self类对象 类方法可以调用其他方法方法不能访问成员变量 类方法中不定直接调用对象方法 实例方法: 实例方法属于实例对象

985100

本质-类对象

每一个对象 都有一个名为isa指针,指向该对象类。 每一个类都描述了一系列实例特点,包括成员变量列表,成员函数列表等。...(图中除了isa外还有其它成员变量,但那是为了兼容非2.0版Objective-C遗留逻辑,大家可以忽略。)...另外,需要注意,我们从集合对象(collection)中获取对象,通常会用到这两个查询类型信息方法因为从集合对象中取出来对象不是强类型(strongly typed),其类型通常是id。...回想一下,我们从一个数组中取出来对象,其返回值id类型。这就是为什么我们可以在这个取出来对象身上通过中括号”[ ]”形式调用任何方法,却不能通过点语法来调用方法。...若是如此,那就应该使用==操作符,而不要使用比较Objective-C对象使常用“isEqual:”方法因为==操作符比较指针是否相等,也就是比较内存地址是否相同。

9.3K50

【IOS开发高级系列】Objective-c Runtime专题总结

另外,还关联了类名,成员变量列表,方法列表,缓存,还有附属协议。         ...这里我们注意第三个成员ivar_offset。表示基地址偏移字节。...这个数组可能包含超过mask+1个元素。需要注意,指针可能NULL,表示这个缓存bucket没有被占用,另外被占用bucket可能连续。这个数组可能会随着时间而增长。         ...结果 NO ,尽管它能够接受 negotiate 消息而不报错,因为靠转发消息给Diplomat 类来响应消息。         ...9.1 类本质         OC中类本质其实就是“结构体+函数指针”组合,当然,对于NSObject而言,首先只是包含一个objc_class类型成员isa,而objc_class一个结构体类型

34630

iOS工程师必看 20 道 面试题

说 Swift 函数式编程语言,是因为 Swift 支持 map, reduce, filter, flatmap 这类去除中间状态、数学函数式方法,更加强调运算结果而不是中间过程。 10....他们遵循基本原则是:高级别的变量不允许被定义为低级别变量成员变量。比如一个 private class 中不能含有 public String。...与 Open 唯一区别在于修饰对象可以在任意 Module 中被访问,但不能重写。 Internal 默认权限。...先给出两种解决方案: 在协议方法前都加上 @objc 关键字,然后再在方法前加上 optional 关键字。该方法实际上协议转化为Objective-C方式然后进行可选定义。...协议命名(例如Shakeable)直接可以确定其实现UIButton拥有相应shake功能;通过协议扩展,可以针对不同类实现特定方法,可维护性也大大提高;因为协议扩展通用于所有实现对象,所以代码复用性也很高

3.7K40

2020-iOS最新面试题解析—1(原理篇)

每一个对象内部都有一个isa指针,这个指针指向真实类型 根据这个指针就能知道将来调用哪个类方法 下面的代码输出什么?...类方法 1 类方法属于类对象 2 类方法只能通过类对象调用 3 类方法self类对象 4 类方法可以调用其他方法 5 类方法不能访问成员变量 6 类方法不能直接调用对象方法 7 类方法存储在元类对象方法缓存中...注意:这个函数第一个参数queue不能全局并发队列 作用:在前面的任务执行结束后才执行,在后面的任务等执行完成后才会执 示例代码 -(void)barrier { dispatch_queue_t...print-object简写 expr:可以在调试时动态执行指定表达式,并将结果打印出来,很有用命令 print:也是打印命令,需要指定类型 bt:打印调用堆栈,thread backtrace...在Objective-C中向nil发送消息完全有效——只是在运行时不会有任何作用 如果一个方法返回值一个对象,那么发送给nil消息将返回0(nil) 如果方法返回值为指针类型,其指针大小为小于或者等于

1.7K21

神经病院Objective-C Runtime入院第一天—isa和Class

ivarsobjc_ivar_list成员变量列表指针;methodLists指向objc_method_list指针指针。*methodLists指向方法列表指针。...在objc_class中,除了isa之外,还有3个成员变量,一个父类指针,一个方法缓存,最后一个这个类实例方法链表。...对象实例方法调用时,通过对象 isa 在类中获取方法实现。 类对象方法调用时,通过类 isa 在元类中获取方法实现。 meta-class之所以重要,是因为存储着一个类所有类方法。...里面包含3个成员变量。SEL方法名字name。typesType Encoding类型编码,类型可参考Type Encoding,在此细说。 IMP一个函数指针,指向函数具体实现。..._cmd表示当前调用方法,其实它就是一个方法选择器SEL。 难点一,能不能调用speak方法

76830
领券