OC属性总结

  1. <pre name="code" class="cpp">    setter 方法的作用:为单一的变量赋值.
  2. setter 方法规范写法:1.- 号方法,无返回值.
  3. 名字以set开头 + 要设置的变量的实例变量名(首字母要大写):(setter方法有且只有一个参数) + 参数的类型(和实例变量类型相同) + 参数名(和实例变量名相同)
  4. getter 方法的作用:获取单一的实例变量的值.
  5. getter 方法的命名规范: - 号方法,有返回值 (返回值类型和实例变量类型相同) 方法名直接和实例变量名相同.   无参数.</span>
  6. 属性
  7. [objc] view plaincopyprint?
  8. 属性是OC2.0之后出来的新的语法,用来替代
  9. setter以及getter方法,使用属性可以快速创建setter以及getter方法的声明,setter以及getter方法的实现.另外还添加了对实例变量操作的安全处理
  10. @property用来定义属性
  11. NSString * 属性的类型(和实例变量类型相同)
  12. name 属性名(和实例变量名相同)
  13. 切记:@property只是自动声明setter以及getter 方法的声明
  14. 属性的定义:
  15. 属性的声明:使用@property 声明属性例如:(@property NSString *name;)
  16. [objc] view plaincopyprint?
  17. 相当于 @interface 中声明了两个方法:
  18. - (void)setName :(NSString *)name;
  19. - (NSString *)name;
  20. [objc] view plaincopyprint?
  21. 属性的实现:使用@synthesize 实现属性(例如:@synthesize name = _name)
  22. [objc] view plaincopyprint?
  23. 相当于@implementation实现了
  24. - (void)setName:(NSString *)name;
  25. - (NSString *)name;
  26. @synthesize name = _name;
  27. [objc] view plaincopyprint?
  28. 注释:
  29. @synthesize  属性的实现部分,实现属性自动生成的setter 以及 getter方法.
  30. name  属性名,指定要实现哪一个属性生成的setter 以及 getter 方法
  31. _name,指定setter 和 getter方法内部所要操作的实例变量
  32. 如果 指定的实例变量没有定义,系统会自动生成指定的实例变量 ,但是生成的实例变量是私有的,子类不能直接访问
  33. 如果实例变量想让子类访问, 那在.h文件必须定义实例变量.
  34. 如果未指定setter 和 getter 内部所要访问的实例变量时, 系统自动生成一个和属性名一样的实例变量    例如:@synthesize name, gender, age, height, weight;
  35. 如果对于setter和getter方法,如果我们实现了,系统就不会再自动生成了
  36. 如果在.m文件中未通过@synthesize对属性进行合成,系统会自动合成,只不过此时系统默认的setter和 getter方法内部所操作的实例变量是 _属性名
  37. 如果将@synthesize省略,并且我们自己实现setter以及 getter方法时, 系统就不会生成对应setter以及 getter,还有实例变量
  38. 属性的特性(attribute)
  39. 第一大特性:读写特性
  40. (1)readonly:告诉编译器,属性在自动生成方法时,只会生成getter方法,不会生成setter方法.
  41. (2)readwrite:告诉编译器,属性在自动生成方法时,既要生成setter方法,也要生成getter方法.系统默认的读写特性
  42. (3)setter = aa: 告诉编译器,当自动生成setter方法时,setter方法的方法名为指定的名字aa,不采用默认的.
  43. (4)getter = bb: 告诉编译器,当自动生成getter方法时,getter方法的方法名为指定的名字bb,不采用默认的.
  44. 第二大特性:原子性特性
  45. (1)atomic: 原子特性,保证线程安全,内部做了安全性访问理(加锁与解锁).系统默认的原子特性
  46. (2)nonatomic:非原子性,不保证线程安全
  47. 因为对于setter以及 getter方法的使用,比较频繁,在一段时间内可能要多次访问,所以使用atomic会非常消耗系统的资源,降低程序的执行效率,使用nonatomic虽然不保证线程的     安全,但是使用一般情况下都是安全的,所以对于原子特性,使用nonatomic.
  48. 第三大特性:语义特性
  49. (1)assign: 直接赋值,使用针对于基本数据类型(int float).也可针对于对象类型.系统默认的语义特性.
  50. (2)copy: 针对于对象类型并且要服从NSCopying协议的对象才可以.会复制出一个新的对象,拥有新的对象的所有权.(引用计数 + 1).(先暂时这么理解)
  51. (3)retain:针对于对象类型,会造成对象的引用计数+ 1
  52. [objc] view plaincopyprint?
  53. 1.当把语义特性声明为assign时, setter 以及 getter 方法内部实现
  54. - (void)setName:(NSString *)name
  55. {
  56. _name = name;
  57. }
  58. - (NSString *)name
  59. {
  60. return _name;
  61. }
  62. 2.当把语义特性声明为retain时, setter 以及 getter 方法内部实现
  63. - (void)setName:(NSString *)name
  64. {
  65. if (_name != name) {
  66. [_name release];
  67. _name = [name retain];
  68. }
  69. }
  70. - (NSString *)name
  71. {
  72. return [[_name retain] autorelease];
  73. }
  74. 3.当把语义特性声明为copy时, setter 以及 getter 方法内部实现
  75. - (void)setName:(NSString *)name
  76. {
  77. if (_name != name) {
  78. [_name release];
  79. _name = [name copy];
  80. }
  81. }
  82. - (NSString *)name
  83. {
  84. return [[_name retain] autorelease];
  85. }
  86. 点语法
  87. 点语法 ,是一种快速访问 setter以及 getter 方法的方式.声明属性默认生成对应的setter以及 getter方法.所以属性和setter和 getter方法都有关联
  88. 对象.属性名  ---如果在等号的左边,意味着调用setter方法,除此情况,都是调用getter方法

OC属性总结

时间: 2024-10-16 15:44:53

OC属性总结的相关文章

iOS开发OC基础:OC属性的一些概念和基本使用

一.属性简介 //属性是OC2.0之后新出的一种语法,能让我们快速的生成setter以及getter方法,大大简化代码 二.如何定义一个属性 //@property 属性关键字,用来定义属性 //NSString * 属性的类型 //name 属性的名字. //@property 只是生成的setter以及getter方法的声明.@property NSString *name; 三.属性的使用注意事项//如果在.m文件中我们自己实现了setter以及getter方法,则编译器就不会再帮我们生成

OC 属性的属性

OC 属性的属性

OC - 属性、点语法

在OC中,为单一实例变量赋值的方法称为setter方法(设置器) 在OC中,读取实例变量值得方法称为getter方法(访问器) OC里规定了setter. getter方法的书写格式 setter方法的书写格式如下: - (void)setAge:(NSInteger)age; 注意:set + 实例变量名(首字母大写),忽略下划线. getter方法的书写格式如下: - (NSInteger)age; 注意:返回值类型与变量类型一直,方法与实例变量名相同,忽略下划线 属性 /* 属性的声明:在

oc 属性、点语法、KVC

?.属性 概念 属性是Objective-C 2.0定义的语法,为实例变量提供了setter. getter?法的默认实现.能在?定程度上简化程序代码,并且增强实例变量的访问安全性 定义 @interface Person : NSObject @property 属性的类型 属性的名字 @end 等价 { NSInteger _number;  //实例变量 } - (void)setNumber:(NSInteger)number; - (NSInteger)number; ?.属性的Att

OC属性总结笔记

如果方法只在.m中实现,没有在.h中声明,这个方法是私有方法,只能在当前类中使用 属性Objective-c的一个特性,通过@property指令来声明属性,会自动生成访问器,不需要手动再添加访问器方法 @property 属性 对实例变量的封装,系统自动添加访问器方法 @sythesize 合成,可用属性名字直接表示实例变量,不需要再加_ 合成的时候 声明属性的方法:@property (参数)数据类型 名字 参数分为4大类: 读写属性:readonly.readwrite 原子性 atomi

OC - 属性

OC类属性 我们知道在Objective-C中,使用@property配合@synthesize可以让编译器自动实现getter/setter方法,使用的时候也很方便,可以直接使用对象.属性的方法调用. NSString*    name; NSUInteger    age; @property(nonatomic,copy)NSString*     name; @property(assign)NSUInteger                    age; @synthesize n

OC 属性关键字

// 属性关键字 /* 1.ARC下(自动管理内存,自动引用计数)(IOS) strong,weak ----------------------------------------- 2.MRC下(手动管理内存,手动引用计数) copy       NSString assgin     基本数据类型 retain     对象类型 3.原子性 atomic      支持多线程 nonatomic   不支持多线程  <---目前就用这个 --------------------------

OC属性property

声明property语法为@property(参数1,参数2,参数3)类型 名字: 例如:@property (assign)int age: 相当于定义了下面俩个方法: - (int) age; - (void) setAge:(int)newAge; 在实现文件.m中我们只要添加如下一行代码: @systhesize age: 就相当于实现了.h文件中的get和set方法. 属性关键字: @property后面的()内可以配置一些参数,下面给出可配置的参数: 1.读写属性:即控制了属性是否存

OC 属性修饰符篇

一.MRC 与 ARC 各自的属性修饰符 1 // 属性修饰符按代码规范的顺序 2 // 是否原子操作.是否可读写.内存管理 3 @property (nonatomic, readwrite, copy) NSString *str; 4 // PS:属性修饰符顺序并没有硬性规定. 二.内存管理修饰符 MRC 模式下属性修饰符 retain: 引用计数加1. assign: 分配内存,类似于copy.常用于基本数据类型,比如:int,long,NSInteger等. ARC 模式下属性修饰符