Objective-C基础之@synthesize, @dynamic

Objective-C基础之@synthesize, @dynamic

OC属性用一个表达式最能清楚的解释其实质:property = ivar + setter+getter,也就是说一个属性是由实例变量+setter方法+getter方法组成。那么现在编译器帮我们做了这件事,在很早之前的版本中需要我们手动合成,那么@synthesize property=ivar这种形式的合成。我们知道,什么情况下编译器不会自动给我们合成属性:

  1. 同时实现setter、getter方法的时候,系统不会再合成ivar 和setter 、getter(当然只读属性,重写getter方法)
  2. 使用@dynamic propertyname的时候
  3. protocol 中定义的属性,不会自动合成setter、getter方法实现,只会生成声明
  4. category 中的属性,会生成getter setter 方法,但是并不会生成ivar,所以需要我们利用runtime objc_setAssociatedObject 和 objc_getAssociatedObject 绑定实例变量和获取实例变量
  5. 重载的属性不会生成

systhesize propertyname = ivarname ,并不会影响编译器合不合成setter、只会影响合成实例变量的名字 
@dynamic 会影响编译器是否合成ivar 和getter setter方法,用词关键字,该属性将不会合成ivar 和setter getter 方法

原文地址:https://www.cnblogs.com/wannaGoBoy/p/9073161.html

时间: 2024-07-30 08:04:40

Objective-C基础之@synthesize, @dynamic的相关文章

property synthesize dynamic 的不同和区别

property:只是对getter和setter方法进行了声明,其他的什么也没有干. synthesize:主要是对getter和 setter方法进行了实现,并且自动把你添加实例变量如果没有实例变量的话.实现主要是根据property特性的设置,例如property设置特性为 copy(retain).readonly.assgin等. dynamic:主要是告诉编译器说 不要给我生成 实例变量.getter.setter方法.我要自己生成.如果你没有自己生成当你在调用getter或者set

<EDEM 基础案例04>Dynamic Domain

本案例包括以下几部分: 介绍 前提 问题描述 设置和求解 后处理 1-介绍 动态计算域(Dynamic Domain)是一种高效模拟大型颗粒床的方法,通过指定局部计算区域,减少计算时间. 案例重点: 2 建立动态计算域: 2 改变颗粒透明度: 2 设置跟踪几何体的相机: 2 设计录像: 2-前提 本案例假定用户熟悉Windows软件界面风格,并对EDEM界面较为熟悉. 3-问题描述 犁地模拟,设置一个运动的刀片,刀片会和颗粒床作用.为了加快模拟速度,在和刀片作用的颗粒区域设置动态计算域,动态计算

@synthesize @dynamic 的区别

@property有两个对应的词,@synthsize @dynamic如果都没写,那么默认就是@synthsize var = _var; @synthsize 如果没有手动实现setter getter方法那么自动生成 ,自动生成_var变量 @dynamic告诉编译器:属性的setter,getter方法有用户自己实现,不自动生成.假如一个属性被声明为@dynamic var 那么如果不实现setter getter方法,编译阶段不会报错,但是一旦使用instance.var = some

Objective - C基础: 第六天 - 2.ARC转换以及第三方框架的管理

在我们之前的项目中, 或多或少都会有手动引用计数的存在, 看到apple出了自动引用计数, 再看看自己的项目, 就有一种砸电脑的冲动, 别着急~~其实apple很为我们开发者着想, 旧项目一样可以转成ARC, 废话少说, 直接上图: 后面的操作不需要我讲了吧? 傻瓜式的操作, 一直下一步, 直到完成为止, 这样子你的项目就会焕然一新~~~全世界都舒服晒(粤语)~~~ 但问题来了, 有一些第三方框架不支持ARC, 那肿么办?? 别着急, apple为开发者考虑的很多, 一样有办法可以解决~~~继续

iOS开发——项目实战总结&带你看看Objective-C的精髓

带你看看Objective-C的精髓 1:接口与实现 @interface...@end @implementation...@end @class 接口(头文件) 实现文件 向前引用 注:类别通过增加新的类和实例方法来扩展现有类的行为.作为惯例,类别被定义在它们自己的.{h,m}文件里, 2:实例变量可视性 @public @package @protected @private @public:实例变量可使用符号 person->age = 32" 被直接读取. @package:实例

IOS学习笔记之关键词@dynamic

@dynamic这个关键词,通常是用不到的. 它与@synthesize的区别在于: 使用@synthesize编译器会确实的产生getter和setter方法,而@dynamic仅仅是告诉编译器这两个方法在运行期会有的,无需产生警告. 假设有这么个场景,B类,C类分别继承A类,A类实现某个协议(@protocol),协议中某个属性( somePropety )我不想在A中实现,而在B类,C类中分别实现.如果A中不写任何代码,编译器就会给出警告: “use @synthesize, @dynam

iOS开发——项目实战总结&警告消除

警告消除 前言:现在你维护的项目有多少警告?看着几百条警告觉得心里烦么?你真的觉得警告又不是错误可以完全不管么? 如果你也被这些问题困惑,可以和我一起进行下面的操作.其实大部分的警告都是很好改的,把自己整个项目的警告撸一遍应该也就耗费半小时的时间,一次麻烦带来之后的清净这样不好么? 本文分为三个部分: 1.简单粗暴的消除警告. 2.详细科学的消除警告.(包括警告收录) 3.添加警告. 一.简单粗暴的消除警告 警告如果是自己项目中的还好直接改了,如果是第三方库,你改了之后,pod下作者更新一下又白

WebApi 接口参数不再困惑:传参详解

转自:http://www.cnblogs.com/landeanfen/p/5337072.html 阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.后台发送请求参数的传递 三.put请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 四.delete请求 五.总结 正文 前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如

iOS -- warnings

Semantic Warnings Warning Message -WCFString-literal input conversion stopped due to an input byte that does not belong to the input codeset UTF-8 -WNSObject-attribute         __attribute ((NSObject)) may be put on a typedef only, attribute is ignore