黑马程序员技术交流社区

标题: 对象的属性封装 [打印本页]

作者: 蜡笔小炎    时间: 2015-5-27 00:00
标题: 对象的属性封装
本帖最后由 蜡笔小炎 于 2015-5-27 00:52 编辑

/***********
*   今天对 “对象的属性封装” 进行学习.收获如下:
*
* 1. 使用 @property 和 @synthesize 来合成存取方法
*
* 2. 4个不同级别的访问控制符:
*    __
*   |   @public:  公共访问权限,可以在任意地方被访问
*   |
*   |   @private: 彻底隐藏成员变量,这个属性只能在当前类的内部被访问 (实现部分定义属性默认 @private)
*  <
*   |   @protected: 子类访问权限,属性可以被继承到子类 (接口部分定义属性默认 @protected)
*   |
*   |__ @package: 映像访问权限,可以在当前类实现的同一映像被访问 (同一映像:编译后生成的同一框架或同一执行文件)
*
*
* 3. 在使用@property定义属性时,还可以在@property和类型之间用括号添加一些指示符:
*   __
*  |    assign: 只对属性简单赋值,不更改引用计数。主要适用于基础类型
*  |
*  |    atomic/nonatomic: 限制是否为原子操作(线程安全),aromic是默认值,但多数情况考虑使用nonatomic来提高访问性能。
*  |
*  |    copy: 调用setter时,会将copy出来的副本对象赋值给成员变量。(会将原成员变量所引用的对象引用计数减1)
* <
*  |    getter/setter: 定义setter和getter的方法名。(setter名要带冒号,如:“setter=abc:” )
*  |
*  |    readonly/readwrite: readwrite为默认值,readonly指示系统只合成getter方法。
*  |
*  |__  retain: 该成员变量原来所引用的对象引用计数减1,赋值对象引用计数加1.
*
* 4.   weak是弱引用,相当于assign,不会造成循环引用。
*      strong是强引用,相当于retain,引用存在则对象不会销毁.
*
Date: 2015/5/10
************/


  1. #import <Foundation/Foundation.h>

  2. @interface LBXYCar : NSObject
  3.     //合成name属性为:副本赋值,线程安全,更改getter名为wawa;setter名为nana。
  4.     @property (copy, nonatomic, getter = wawa, setter = writeName:) NSString* name;
  5.     //合成price属性为:直接赋值,线程安全。
  6.     @property (assign, nonatomic) int price;

  7. @end




  8. @implementation LBXYCar

  9.     @synthesize name;
  10.     @synthesize price;

  11. @end


  12. #import <Foundation/Foundation.h>

  13. int main(int argc, const char * argv[])
  14. {
  15.     @autoreleasepool
  16.     {
  17.         LBXYCar* aCar = [[LBXYCar alloc] init];
  18.         [aCar writeName:@"开心大麻花"];
  19.         [aCar setPrice:200];
  20.         NSLog(@"%@的价格是:%d亿元。" ,aCar.name, aCar.price);
  21.         
  22.         
  23.    
  24.     }
  25.     return 0;
  26. }
复制代码




作者: hui1107464497    时间: 2015-5-27 00:14
哇,好多代码,没用过@synthesize这个,是啥呢?
作者: 星空眼泪    时间: 2015-5-27 00:44
谢谢楼主分享
作者: 蜡笔小炎    时间: 2015-5-27 00:50
hui1107464497 发表于 2015-5-27 00:14
哇,好多代码,没用过@synthesize这个,是啥呢?

用于取代getter和setter的实现,最新的Xcode好像不需要写这个了
作者: 张晓珊    时间: 2015-5-27 00:58
hui1107464497 发表于 2015-5-27 00:14
哇,好多代码,没用过@synthesize这个,是啥呢?

在Xcod4.4之前的版本,@property只用于set和get方法的声明,@synthesize用于set和get方法的实现。Xcod4.4版本之后,@property集合了成员变量的声明,set 和 get方法的声明,set 和 get方法的实现三个作用,所以现在写代码用不上@synthesize这个关键字了,仅需要了解下,因为可能有些公司的项目中有几年前的代码,里边还是有用到这个关键字,如果遇到了要求能看懂就行。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2