OC 属性
1 属性和实例变量 :属性 == 实例变量声明 + setter 方法+ getter 方法
在老版本的 OC 语言中,我们需要同时声明属性和底层实例变量,那时,属性是 OC 语言的一个新的机制,并且要求你必须声明与之对应的实例变量。
后来,苹果将默认编译器从 GCC 转换为 LLVM(low level virtual machine),从此不再需要为属性声明实例变量了。如果 LLVM发现没有一个匹配属性的实例变量,它将自动创建一个以下划线开头的实例变量。但是生成的实例变量是私有的,子类不能访问!
2 @property = ivar + getter +setter (ivar = 实例变量=成员变量)
@synthesize 作用:自动生成setter方法 和 getter方法
如果使用了属性的话,那么编译器就会自动编写访问属性所需的方法,此过程叫做自动合成(auto synthesis),这个过程由编译器在编译期执行,所以编辑器里看不到这些“合成方法”的源代码
3 @synthesize 还有一个重要作用,可以指定与属性对应的实例变量
例如 @synthsize name = XXX; 那么 self.name 其实操作的实例变量就是 XXX,而不是 _name.但是一般习惯写成 @synthesize name = _name;
4 什么情况不会 auto synthesis
*同时重写了 setter 和 getter时
*重写了只读属性的 getter 时
*使用了 @dynamic时
*在 @protocol 中定义的所有属性
*在 category 中定义的所有属性
*重载的属性
以上情况需要手动创建 ivar
5 @synthesize 和 @dynamic 分别有什么作用
@property 有两个对应的词,一个是@synthesize,一个是@dynamic。如果@synthesize和@dynamic 都没写,那么默认的就是 @synthesize var = _var;
@synthesize 的语义是如果你没有手动实现 setter 和 getter 方法,那么编译器会自动为你加上这两个方法
@dynamic 告诉编译器:属性的setter 与 getter方法由用户自己实现,不自动生成
6 属性的特性
OC 属性的更多相关文章
- runtime使用小例子 - 给对象O-C属性赋值
这些日子在家里学习runtime,看runtime的一些方法和前辈们的博客,我也尝试着写几个runtime有效的运用 一.给对象属性赋值,例如一个WebEntity类 她有三个属性:NSString. ...
- iOS学习12之OC属性和点语法
1.属性(@property和@Synthesize) 1> 属性是 Objective-C 2.0 定义的语法,提供 setter 和 getter 方法的默认实现.在一定程度上简化代码,并且 ...
- 理解OC“属性”这一概念
1.定义一个属性,编译器会自动编写相关的存取方法和实例变量,如果不想使用系统默认的实例变量,可以使用@synthesize(合成)语法来指实例变量的名字,如果不想编译器自动合成存取方法,则可以自己实现 ...
- OC 属性关键字
// 属性关键字 /* 1.ARC下(自动管理内存,自动引用计数)(IOS) strong,weak ----------------------------------------- 2.MRC下( ...
- iOS 面试题:OC标题的基本概念<延续>
第一,如何确定一个方法方法名称 删除减号,加,删除返回值,删除参数类型,删除参数,剩下的就是的方法名 秒,id,能够用assign,copy,retain,依据须要使用 第三,autorelease ...
- OC和JS的交互---JavaScriptCore
JavaScriptCore的简单介绍 JavaScriptCore是iOS7提供的原生框架,可以让Objective-C和JavaScript提供简单直接的交互. JavaScriptCore的使用 ...
- OC简单介绍
一.OC与C的对比 关键字 OC新增的关键字在使用时,注意部分关键字以"@"开头 方法->函数 定义与实现 数据类型 新增:BOOL/NSObject/id/SEL/bloc ...
- Runtime的几个小例子(含Demo)
一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.) 1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数); [runti ...
- iOS Developer Libray (中文版)-- Defining Classes 定义类
该篇是我自己学习iOS开发时阅读文档时随手记下的翻译,有些地方不是很准确,但是意思还是对的,毕竟我英语也不是很好,很多句子无法做到准确的字词翻译,大家可以当做参考,有错误欢迎指出,以后我会尽力翻译的更 ...
随机推荐
- centos jenkins
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo rpm --import htt ...
- 解决服务器时间Local time和RTC time不一致的问题
今天遇到了一个问题,发现程序读取的时间比实际的时间快了几分钟. 执行 timedatectl status 发现 Local time比实际的快,但是RTC time是准确的. 各种google也没搞 ...
- 推荐10个bootstrap及其他框架的后台管理模板
相对于网站前台炫目多彩的设计,网址后台的设计模板貌似有点少,在这里推荐10个可以免费下载的~ 1.自适应超酷整站 win8风格的Bootstrap响应式网站后台管理模板-Apricot 2.boots ...
- [Mysql] 一些记录
1> 修改表的字段 alter table trade_market change reqype reqtype int(10) unsigned not null;alter table tr ...
- Flex 文本控件实现自定义复制粘贴
由于添加了自定义右键菜单,导致Textinput控件默认的右键复制粘贴功能被屏蔽了.最后通过JS脚本实现这个功能,参考代码如下 <?xml version="1.0" enc ...
- spinner下拉框组件
方法一代码如下: <string-array name="city_name"> <item>浙江</item> <item>上海& ...
- 简单回忆一下JavaScript中的数据类型
说到JavaScript,大家都应该知道,它是一门脚本语言,也是一门弱类型语言,也是一门解析型的语言,同时也是一门动态类型的语言. 很好,至于JavaScript中数据类型.其分为基本数据类型和复杂数 ...
- Svn常见问题及相关原因
1. svn: Server sent unexpected return value (500 Internal Server Error) in response to OPTIONS reque ...
- PHP 函数(2)
自定义函数: $name = "fakeface"; function dispalyName(){ echo "fakeface"; } function r ...
- android baseActivity
package newdemo.jeno.designdemo.activitynew; import android.os.Bundle;import android.support.annotat ...