Object-c基础(2)
2016-03-06 22:02
411 查看
类和对象
类
在Object-c中类,其接口(interface)和实现(implementation)是分离开来的
类的声明
@interface 类名:父类名 { 实例变量的定义; } 方法声明; ... @end
类的实现
@implementation 类名 方法定义 ... @end
对象
一个类提供对象的图纸,然后创建这个类的对象
类名 对象名=[[类名 alloc]init];
访问一个类的对象的属性可以直接使用访问成员运算符(.)
属性和变量
属性
属性(property)指在接口文件中声明实例对象到底有哪些属性
属性声明的一些规则总结如下:
- 自动生成访问方法
- 自动生成实例变量
- 更简单地调用访问方法(使用点操作符(.)完成)
- 属性的内省(introspection):通过内省可以动态地查询类中声明的属性以及属性的名称和类型
显示声明属性
让编译器自动生成与数据成员同名的方法
@property int hitPoint;
相当于自动声明了实例变量和读写方法,方便外部使用
属性的实现
使用@synthesize,让编译器自动生成setter和getter方法
@synthesize hitPoint;
synthesize还有一个作用就是可以指定与属性对应的实例变量,例如@synthesize myButton = xxx;那么self.myButton其实是操作的实例变量xxx,而不是_myButton了。
属性指定的选项
@property 可用的选项
- 指定方法名(显式指定getter和setter方法名) getter=getter 方法名
- setter=setter 方法名
-
readonly(只读)
-
assign(单纯赋值)
-
nonatomic(非原子性操作、非线程安全)
我们可以为可读写的@property设置选项,选项共有6种:assign,retain,unsafe_unretained,strong,weak和copy。选项之间是排他关系,可以不设置任何选项或只设置6种种的一种。根据所修饰的属性是否是对象类型或者所采用的内存管理方式(手动计数,ARC)的不同,选项的意义也不同。
如表所示:
基础数据类型 | 手动引用计数 | ARC | |
---|---|---|---|
未指定任何选项 | 直接赋值 | 警告 | 警告 |
assign unsafe_unretained |
直接赋值 | 直接赋值 | 直接赋值 |
retain strong |
出错 | 赋值并对新值进行retain操作 | 赋值并对新值进行retain操作 |
weak | 出错 | 无特别操作和assign相同 | 弱引用 |
copy | 出错 | 赋值时建立传入值的一份副本 | 赋值时建立传入值的一份副本 |
相关文章推荐
- Func<T, bool> Func<T, object>小例子
- Objective-C语法之代码块(block)的使用
- enumerateObjectsUsingBlock 、for 、for(... in ...) 的差别 & 性能測试
- kobject && kset
- iOS学习笔记(13)—— Objective-C类扩展的方法之一——分类(category)
- Object类的重要方法
- Keras笔记 -- objective
- C#取硬盘、CPU、主板、网卡的序号 ManagementObjectSearcher (WMI)
- java学习日记——Object类II
- c# 线程池RegisterWaitForSingleObject的一个Demo
- JSON 之 SuperObject(10): Merge、Clone、ForcePath
- JSON 之 SuperObject(9): TSuperType
- JSON 之 SuperObject(7): 可以省略的双引号
- JSON 之 SuperObject(6): 方法
- JSON 之 SuperObject(5): Format 与转义字符
- JSON 之 SuperObject(4): 增、删、改
- JSON 之 SuperObject(3): 访问
- JSON 之 SuperObject(1)
- JSON 之 SuperObject(12): TSuperEnumerator、TSuperAvlIterator、ObjectFindFirst...
- JSON 之 SuperObject(13): 关于 SO 与 SA 函数