OC之特性、类别

1.特性(property)

在OC中,使用特性可以让我们避免手写setter、getter方法,避免这些问题带来的内存问题。

 @property : 编译器指令,编译器会为我们自动创建setter、getter方法的声明,在新版本的XCode中声明的同时也帮我们实现了setter、getter方法。
 @synthesize: 为我们实现setter、getter的实现方法。而且可以使用该编译器指令将@property声明的实例变量修改为新的名称。

 如果使用了特性,可以使用 点语法调用setter、getter方法。当点出现在等号左边,表示setter方法,出现在等号右边 表示getter方法。
 特性扩展:
 1.assign  //简单赋值,用于基本数据类型
 2.copy  //创建一个对象,新的对象和这个对象是两个独立的对象
 3.retain  将对象的引用计数加1
 4.readonly  表示只读属性,只会生成getter方法。
 5.readwrite  默认属性。生成setter、getter方法
 6.nonatomic  //非原子访问、不加同步。多线程并发访问提高性能
 这些特性可以多个同时使用 如(retain,areadonly,nonatomic)
 还可以修改属性的方法 如:(getter = isNew),则调用getter方法时,可以使用isNew代替。但是不可以用特性声明带有多个参数的setter、getter方法。这些方法只能手动来写。

2.类别(category)

类别:为现有的类(自定义的类、第三方的类和系统的类)添加一些行为(方法)。
声明和实现类别:声明一般以“类名+类别名”来命名、如:NSString+numberCovinence。但在类别里面不可以声明实例变量。

使用类别可以实现分散代码:如果一个工程较大,用类别将这个工程分散为多个模块,分散实现,这样有利于代码的维护和可读性。
类别的优缺点:
    缺点:无法在类别中添加新的成员变量。名称冲突
    优点:将类的实现分散在多个文件或框架中,创建对私有方法的前向引用,向对象添加非正式协议。
用类别实现类的扩展:
    1、不能有类别名字
    2、可以在源代码里面使用
    3、可以添加实例变量,作为类的私有变量
    4、可以将只读权限修改为读写权限
    5、创建的数量不限
前向引用:对于某个类实现了一些私有方法,类的外部不能直接调用。这个时候可以使用前向引用,即创建一个类别,实现该私有方法的声明,但并不去实现它,这样编译器就会认为已经有了这个方法的实现,就不会提示错误,在编译的时候编译器会再工程的文件中扫描该私有方法的实现代码,找到就执行。为什么会这样,因为OC是动态的,它的方法调用机制就是这样设置的。
非正式协议:实际就是创建一个NSObject类的类别。即创建的这个类别添加的行为任何类都可以实现,因为NSObject是所有类的根类。
委托:一个对象委托另外一个对象执行某些操作的技术实现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值