Objective-C中的property
property可以被声明的位置
property可以在类的interface section和class extension以及protocol中被声明
property的可见性
Objective-C中的property实际上就是getter和setter方法。一个类的property能够在外部被访问,主要看该类的property声明在外部能否可见。比如有一个类X,其.h和.m文件如下:
//X.h #import <Foundation/Foundation.h> @interface X : NSObject @end
//X.m #import "X.h" @interface X () @property (assign, nonatomic) int i; @end @implementation X @end
如果在main函数中访问声明于X.m中的property,则会报错:
//main.m #import <Foundation/Foundation.h>
#import "X.h" int main(int argc, const char * argv[]) {
@autoreleasepool { X *x = [X new];
x.i = ; //报错,property i不可见 }
return ;
}
但是,如果我们把class extension移动到X.h中,此时main函数就可以看到property i的声明,就不会报错。或者,你可以在X.h中的interface section部分声明property i的setter方法,由于main函数访问的实际就是property i的setter方法,经过声明之后,setter方法对于main函数可见,因此也不会报错。
property合成实例变量的名字
property合成实例变量有3中情况:
1) 不使用@synthesize指令,此时合成的实例变量名字为下划线加上property,即_property
2) 只使用@synthesize property名,那么此时合成的实例变量名字和property名一样
3) 使用@synthesize property名=实例名,那么此时合成的实例名字就是指定的名字
什么时候不会为property合成实例变量
如果你为一个readwriteproperty自定义了getter,setter方法或者为一个readonly property自定义了getter方法,那么编译器不会自动合成对应的实例变量,除非显示使用@synthesize property名或者@synthesize property名=实例名
合成的实例变量的可访问性
合成的实例变量都是private的。
property的默认attribute
property的默认attribute是strong(对于引用类型),atomic,readwrite的
Objective-C中的property的更多相关文章
- objective c, category 和 protocol 中添加property
property的本质是实例变量 + getter 和 setter 方法 category和protocol可以添加方法 category 和 protocol中可以添加@property 关键字 ...
- OC中的@property详解
简介: @property 生成了变量的get set 方法,同时指定了变量名称. 例如@property (nonatomic,strong) NSString *name;表示生成了_name私有 ...
- Objective-C中的@property和@synthesize用法
@代表“Objective-C”的标志,证明您正在使用Objective-C语言 Objective-C语言关键词,@property与@synthesize配对使用. 功能:让编译好器自动编写一个与 ...
- JavaScript中的property和attribute
property,attribute都作“属性”解,但是attribute更强调区别于其他事物的特质/特性. 而在JavaScript中,property和attribute更是有明显的区别.众所周知 ...
- 理解Objective C 中id
什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
- Objective-C中的@property
1:@property 是什么? 在Objective-C中,@property 是声明属性的语法,它可以快速方便的为实例变量创建getter/setter方法. 2:@property 的本质? @ ...
- Objective-C中的@Property详解
Objective-C中的@Property详解 @Property (属性) class vairs 这个属性有nonatomic, strong, weak, retain, copy等等 我把它 ...
- Objective-C中的@Property具体解释
Objective-C中的@Property具体解释 @Property (属性) class vairs 这个属性有nonatomic. strong. weak, retain. copy等等 我 ...
随机推荐
- C++ 虚函数详解
C++ 虚函数详解 这篇文章主要是转载的http://blog.csdn.net/haoel/article/details/1948051这篇文章,其中又加入了自己的理解和难点以及疑问的解决过程,对 ...
- javaWeb--jsp & jQuery
jsp页面的基本构成:指令标签HTML标记语言注释 <!-- html注释 --> <%-- java代码注释 --> //html注释对jsp嵌入的代码不起作用,因 ...
- 阿里云Centos7使用yum安装MySQL5.6的正确姿势
阿里云Centos7使用yum安装MySQL5.6 阿里云Centos7使用yum安装MySQL5.6 前言:由于某些不可抗力,我要在自己的阿里云服务器上搭建hadoop+hive+mysql+tom ...
- Linux - How To Set Up an NFS Mount on CentOS 6
About NFS (Network File System) Mounts NFS mounts work to share a directory between several servers. ...
- MathJax测试
\begin{array}{cc} a & b \\ c & d \end{array} \begin{equation} \int_0^\infty \frac{x^3}{e^x-1 ...
- 使用AlarmManager进行定时任务处理
1:UploadingService.java package com.example.service; import com.example.broadcast.AlarmReceiver; imp ...
- BZOJ 2324 营救皮卡丘
http://www.lydsy.com/JudgeOnline/problem.php?id=2324 思路:最小费用最大流 考虑设数组d[k][i][j],代表只用前k个城市,i到j的最短路 然后 ...
- EXTJS 4.2 实现 gridpanel 鼠标悬停单元格以提示信息的方式显示单元格内容。
由于gridpanel的单元格里的文字太多时候,都由省略号代替,就想实现如题的功能,经过反复实验,终于搞定了!直接上代码: me.on('itemmouseenter', function (view ...
- 转:PHP分页技术的代码和示例
本文来自:10 Helpful PHP Pagination Scripts For Web Developers 分页是目前在显示大量结果时所采用的最好的方式.有了下面这些代码的帮助,开发人员可以在 ...
- Tk::Table
<pre name="code" class="python"># DESCRIPTION # Tk::Table is an all-perl w ...