自动生成getter和setter方法

作者:追风剑情 发布于:2019-2-21 12:15 分类:Objective-C

示例一:利用@property@synthesize指令自动生成getter和setter

Fraction.h

  1. #import <Foundation/Foundation.h>
  2.  
  3. @interface Fraction : NSObject
  4.  
  5. //@property指令让编译器自动为numerator、denominator生成getter、setter方法
  6. @property int numerator, denominator;
  7.  
  8. -(void) print;
  9. -(double) convertToNum;
  10.  
  11. @end


Fraction.m

  1. #import "Fraction.h"
  2.  
  3. @implementation Fraction
  4.  
  5. //@synthesize与@property指令配合使用来自动生成getter、setter方法
  6. //会自动生成设值方法setNumerator、setDenominator
  7. //会自动生成取值方法numerator、denominator
  8. @synthesize numerator, denominator;
  9.  
  10. -(void) print
  11. {
  12. NSLog(@"%i/%i", numerator, denominator);
  13. }
  14.  
  15. -(double) convertToNum
  16. {
  17. if (denominator != 0)
  18. return (double) numerator / denominator;
  19. else
  20. return NAN;
  21. }
  22.  
  23. @end


main.m

  1. #import <Foundation/Foundation.h>
  2. #import "Fraction.h"
  3.  
  4. int main(int argc, const char * argv[]) {
  5. @autoreleasepool {
  6. Fraction *myFraction = [[Fraction alloc] init];
  7. //[myFraction setNumerator: 1];
  8. //[myFraction setDenominator: 3];
  9. //使用点语法设值(即,调用setter方法),与上面两句代码等价
  10. myFraction.numerator = 1;
  11. myFraction.denominator = 3;
  12. NSLog(@"The numerator is %i, and the denominator is %i",
  13. myFraction.numerator, myFraction.denominator);
  14. }
  15. return 0;
  16. }


运行测试

2.png

示例二:省略@synthesize指令

Fraction.h

  1. #import <Foundation/Foundation.h>
  2.  
  3. @interface Fraction : NSObject
  4.  
  5. //@property指令让编译器自动为numerator、denominator生成getter、setter方法
  6. @property int numerator, denominator;
  7.  
  8. -(void) print;
  9. -(double) convertToNum;
  10.  
  11. @end


Fraction.m

  1. #import "Fraction.h"
  2.  
  3. @implementation Fraction
  4.  
  5. //@synthesize与@property指令配合使用来自动生成getter、setter方法
  6. //会自动生成设值方法setNumerator、setDenominator
  7. //会自动生成取值方法numerator、denominator
  8. //@synthesize numerator, denominator;
  9.  
  10. -(void) print
  11. {
  12. //如果省略了@synthesize指令,那么实例变量前要加下画线。
  13. NSLog(@"%i/%i", _numerator, _denominator);
  14. }
  15.  
  16. -(double) convertToNum
  17. {
  18. //如果省略了@synthesize指令,那么实例变量前要加下画线。
  19. if (_denominator != 0)
  20. return (double) _numerator / _denominator;
  21. else
  22. return NAN;
  23. }
  24.  
  25. @end


main.m

  1. #import <Foundation/Foundation.h>
  2. #import "Fraction.h"
  3.  
  4. int main(int argc, const char * argv[]) {
  5. @autoreleasepool {
  6. Fraction *myFraction = [[Fraction alloc] init];
  7. //[myFraction setNumerator: 1];
  8. //[myFraction setDenominator: 3];
  9. //使用点语法设值(即,调用setter方法),与上面两句代码等价
  10. myFraction.numerator = 1;
  11. myFraction.denominator = 3;
  12. NSLog(@"The numerator is %i, and the denominator is %i",
  13. myFraction.numerator, myFraction.denominator);
  14. }
  15. return 0;
  16. }


运行测试
2.png

注意:你并不需要使用@synthesize指令,使用@property指令就足够了。编译器会自动为你生成setter和getter。但是,注意,如果不使用@synthesize,那么编译器生成的实例变量会以下画线(_)字符作为其名称的第一个字符。

注意:点运算符通常用在属性上,用于设置或取得实例变量的值。做其他工作的方法通常不是由点运算符执行的,而是使用传统的方括号形式的消息表达式作为首选的语法。

注意:使用合成(synthesize)的存取方法,属性名称的前面不要以new、alloc、copy或者init这些词开头。这与编译器的一些假定有关,因为编译器会合成相应的方法,内存管理和引用计数会有更详细的描述。


标签: Objective-C

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号