zoukankan      html  css  js  c++  java
  • ios的@property属性和@synthesize属性(转)

    当你定义了一系列的变量时,需要写很多的getter和setter方法,而且它们的形式都是差不多的,,所以Xcode提供了@property 和@synthesize属性,@property用在 .h 头文件中用作声明,@synthesize用在.m 文件中用于实现。

    如下,新建一个基于“Command Line Tool”的项目,名为“property”,再新建一个Student类,

    传统的写法是:

    Student.h

    1. //  
    2. //  Student.h  
    3. //  property  
    4. //  
    5. //  Created by Rio.King on 13-8-25.  
    6. //  Copyright (c) 2013年 Rio.King. All rights reserved.  
    7. //  
    8.   
    9. #import <Foundation/Foundation.h>  
    10.   
    11. @interface Student : NSObject  
    12. {  
    13.     int age;  
    14.     int no;  
    15. }  
    16.   
    17. //age的getter和setter方法声明  
    18. - (int)age;  
    19. - (void)setAge:(int)newAge;  
    20.   
    21. //no的getter和setter方法声明  
    22. - (int)no;  
    23. - (void)setNo:(int)newNo;  
    24.   
    25. @end  


    Student.m

    1. //  
    2. //  Student.m  
    3. //  property  
    4. //  
    5. //  Created by Rio.King on 13-8-25.  
    6. //  Copyright (c) 2013年 Rio.King. All rights reserved.  
    7. //  
    8.   
    9. #import "Student.h"  
    10.   
    11. @implementation Student  
    12.   
    13. //age的getter和setter方法的实现  
    14. - (int)age  
    15. {  
    16.     return age;  
    17. }  
    18. -(void)setAge:(int)newAge  
    19. {  
    20.     age = newAge;  
    21. }  
    22.   
    23. //no的getter和setter方法的实现  
    24. - (int)no  
    25. {  
    26.     return no;  
    27. }  
    28. - (void)setNo:(int)newNo  
    29. {  
    30.     no = newNo;  
    31. }  
    32.   
    33. @end  


    main.m

    1. //  
    2. //  main.m  
    3. //  property  
    4. //  
    5. //  Created by Rio.King on 13-8-25.  
    6. //  Copyright (c) 2013年 Rio.King. All rights reserved.  
    7. //  
    8.   
    9. #import <Foundation/Foundation.h>  
    10. #import "Student.h"   
    11.   
    12. int main(int argc, const char * argv[])  
    13. {  
    14.   
    15.     @autoreleasepool {  
    16.           
    17.         // insert code here...  
    18.         Student *stu = [[Student alloc] init];  
    19.         stu.age = 100;//这句相当于setter方法  
    20.         NSLog(@"age is %i", stu.age);//这里的 stu.age 相当于getter方法  
    21.           
    22.         [stu release];  
    23.           
    24.     }  
    25.     return 0;  
    26. }  


    ------------------------------------------------------------------------------------------------------------------------ 用@property和@synthesize的写法是:

     Student.h

    1. //  
    2. //  Student.h  
    3. //  property  
    4. //  
    5. //  Created by Rio.King on 13-8-25.  
    6. //  Copyright (c) 2013年 Rio.King. All rights reserved.  
    7. //  
    8.   
    9. #import <Foundation/Foundation.h>  
    10.   
    11. @interface Student : NSObject  
    12. {  
    13.     int age;  
    14.     int no;  
    15. }  
    16.   
    17. //当编译器遇到@property时,会自动展开成getter和setter的声明  
    18. @property int age;  
    19. @property int no;  
    20.   
    21.   
    22. @end  


    Student.m

    1. //  
    2. //  Student.m  
    3. //  property  
    4. //  
    5. //  Created by Rio.King on 13-8-25.  
    6. //  Copyright (c) 2013年 Rio.King. All rights reserved.  
    7. //  
    8.   
    9. #import "Student.h"  
    10.   
    11. @implementation Student  
    12.   
    13. //@synthesize 会自动生成getter和setter的实现  
    14. //@synthesize 默认会去访问age,no,height同名的变量,,  
    15. //如果找不到同名的变量,会在内部自动生成一个私有同名变量age,no,height,,  
    16. //因此Student.h 中的这几个变量也可以省略不写。  
    17. @synthesize age,no;  
    18.   
    19. @end  


    main.m

    1. //  
    2. //  main.m  
    3. //  property  
    4. //  
    5. //  Created by Rio.King on 13-8-25.  
    6. //  Copyright (c) 2013年 Rio.King. All rights reserved.  
    7. //  
    8.   
    9. #import <Foundation/Foundation.h>  
    10. #import "Student.h"  
    11.   
    12. int main(int argc, const char * argv[])  
    13. {  
    14.       
    15.     @autoreleasepool {  
    16.           
    17.         // insert code here...  
    18.         Student *stu = [[Student alloc] init];  
    19.         stu.age = 100;  
    20.         NSLog(@"age is %i", stu.age);  
    21.           
    22.         [stu release];  
    23.     }  
    24.     return 0;  
    25. }  


    几点说明:

    1.在Xcode4.5及以后的版本中,可以省略@synthesize ,编译器会自动帮你加上getter 和 setter 方法的实现,并且默认会去访问

    _age这个成员变量,如果找不到_age这个成员变量,会自动生成一个叫做 _age私有成员变量。

    2.视频教学中建议变量名用"_"前缀作为开头,但我看big Nerd 那本书里是不用的,个人也比较习惯 big Nerd 的那种写法,所以变量名就不加前缀了。Y^o^Y

    摘自:http://blog.csdn.net/chaoyuan899/article/details/10310719

  • 相关阅读:
    【SpringMVC】SpringMVC系列15之SpringMVC最佳实践
    【SpringMVC】SpringMVC系列14之SpringMVC国际化
    could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of(maven报错)
    ubuntu14安装tensorflow并测试
    HTMLajax跨域向服务器写入数据
    eclipse的最新版本luna的中建立svn和maven
    关于equals与hashcode的重写
    会计中的冲销和红票
    dubbo在项目中的应用
    dubbo介绍以及创建
  • 原文地址:https://www.cnblogs.com/YangBinChina/p/3762253.html
Copyright © 2011-2022 走看看