Object-c基础(2)

类和对象

在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(只读)
    • readwrite(读写)
  • 赋值时的选项
    • assign(单纯赋值)
    • retain(进行保持操作)
    • unsafe_unretained(同assign一样(用于ARC))
    • strong(同retain一样(用于ARC))
    • weak(弱引用(用于ARC))
    • copy(复制对象)
  • 原子性操作
    • nonatomic(非原子性操作、非线程安全)
属性赋值时的选项

我们可以为可读写的@property设置选项,选项共有6种:assign,retain,unsafe_unretained,strong,weak和copy。选项之间是排他关系,可以不设置任何选项或只设置6种种的一种。根据所修饰的属性是否是对象类型或者所采用的内存管理方式(手动计数,ARC)的不同,选项的意义也不同。

如表所示:

基础数据类型 手动引用计数 ARC
未指定任何选项 直接赋值 警告 警告
assign
unsafe_unretained
直接赋值 直接赋值 直接赋值
retain
strong
出错 赋值并对新值进行retain操作 赋值并对新值进行retain操作
weak 出错 无特别操作和assign相同 弱引用
copy 出错 赋值时建立传入值的一份副本 赋值时建立传入值的一份副本
原文地址:https://www.cnblogs.com/evansyang/p/5248760.html