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的更多相关文章

  1. objective c, category 和 protocol 中添加property

    property的本质是实例变量 + getter 和 setter 方法 category和protocol可以添加方法 category 和 protocol中可以添加@property 关键字 ...

  2. OC中的@property详解

    简介: @property 生成了变量的get set 方法,同时指定了变量名称. 例如@property (nonatomic,strong) NSString *name;表示生成了_name私有 ...

  3. Objective-C中的@property和@synthesize用法

    @代表“Objective-C”的标志,证明您正在使用Objective-C语言 Objective-C语言关键词,@property与@synthesize配对使用. 功能:让编译好器自动编写一个与 ...

  4. JavaScript中的property和attribute

    property,attribute都作“属性”解,但是attribute更强调区别于其他事物的特质/特性. 而在JavaScript中,property和attribute更是有明显的区别.众所周知 ...

  5. 理解Objective C 中id

    什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...

  6. 浅谈Objective—C中的面向对象特性

    Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...

  7. Objective-C中的@property

    1:@property 是什么? 在Objective-C中,@property 是声明属性的语法,它可以快速方便的为实例变量创建getter/setter方法. 2:@property 的本质? @ ...

  8. Objective-C中的@Property详解

    Objective-C中的@Property详解 @Property (属性) class vairs 这个属性有nonatomic, strong, weak, retain, copy等等 我把它 ...

  9. Objective-C中的@Property具体解释

    Objective-C中的@Property具体解释 @Property (属性) class vairs 这个属性有nonatomic. strong. weak, retain. copy等等 我 ...

随机推荐

  1. java 编码转换

    在网络中爬取到的数据,编码可能与当前编译器的编码不相同,而导致可能产生显示乱码的问题.那么如何将网络的编码,转换为当前编译器认可的编码(一般为UTF-8),就是个问题了. 主要使用了两个方法: Str ...

  2. 自定义View—颜色

    一.颜色通道的意思 ARGB888.ARGB444.RGB565.Alpha8的区别 二.如何自定义颜色 ①.首先ARGB分别表示

  3. 克隆contos 出现 Error:No suitable device found: no device found for connection &amp;quot;System eth0&amp

    二.问题 这时我复制好的虚拟机,启动登陆进去(用户名和密码跟之前那台是一样的),修改好IPADDR,然后网卡重启出现问题? #service network restart 出现问题:Error:No ...

  4. 愉快的开始 - Windows程序设计(SDK)000

    愉快的开始 让编程改变世界 Change the world by program  参考教材 购买链接:Windows程序设计(第5版)(珍藏版)(附CD-ROM光盘1张)  学习环境 视频演示:W ...

  5. CoreData (三)备

    NSFetchedResultsController 什么是NSFetchedResultsController NSFetchedResultsController是一个让人爱恨交加的一个类.如果使 ...

  6. Java开发工具与程序调试

    开发工具:MyEclipse,Eclipse等. 程序调试:  (1)断点:设置断点是程序调试中必不可少的手段,Java调试器每次遇到程序断点时都会将当前线程挂起,即暂停当前程序的运行.(在Eclip ...

  7. mysql主从数据库复制

    http://blog.csdn.net/lgh1117/article/details/8786274 http://blog.csdn.net/libraworm/article/details/ ...

  8. ASP.NET MVC3快速入门——第四节、添加一个模型

    在本节中我们将追加一些类来管理数据库中的电影.这些类将成为我们的MVC应用程序中的“模型”部分.我们将使用一个.NET Framework的被称之为“Entiry Framework”的数据访问技术来 ...

  9. 《Programming WPF》翻译 第9章 5.默认可视化

    原文:<Programming WPF>翻译 第9章 5.默认可视化 虽然为控件提供一个自定义外观的能力是有用的,开发者应该能够使用一个控件而不用必须提供自定义可视化.这个控件应该正好工作 ...

  10. 转:C# 定时任务实现

    原文地址:http://blog.csdn.net/Netself/article/details/5766398 C#实现的定时任务类,核心代码如下: 以下代码可直接封装成 TimerTask.dl ...