@property关键字和@synthesize关键字
来源:互联网 发布:linux 删除过期文件 编辑:程序博客网 时间:2024/06/05 10:02
@property关键字:
用来生成setter和getter方法的声明,也可以定义setter和getter方法格式为:@property 类型 名称1,名称2...............
1.@property的基本使用
例:
Person.h
#import <Foundation/Foundation.h>@interface Person : NSObject{ int _age;}@property int age;// 这一句表示声明了 setAge和 age方法@end
--------------------------------------------------------------------------------------------------------------
Person.m
#import <Foundation/Foundation.h>@interface Person : NSObject{ int _age;}@property int age;// 这一句表示声明了 setAge和 age方法@end
--------------------------------------------------------------------------------------------
main.m
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]){ Person *p = [Person new]; [p setAge:20]; NSLog(@"年龄 %d",[p age]); return 0;}
如果在Person.h中没有@property,则在main.m中是不能调用到setAge和age方法的,因为没有方法的声明
但是,如果加上@property则表示了方法的声明。
@property会根据类型和名称来自动生成setter和getter方法的声明和定义
2.@property同时为多个成员变量声明setter和getter方法
格式为:@property 类型 名称1,名称2...............
注意:名称1,名称2的类型必须要一致,即成员变量的类型要一致
例:
Person.h
#import <Foundation/Foundation.h>@interface Person : NSObject{ int _speed; int _weight;}@property int speed,weight;//这里为 _speed, _weight声明setter 和getter方法,所以 _speed和 _weight的类型要一直@end
--------------------------------------------------------------------------------------------------
Person.m
#import "Person.h"@implementation Person@synthesize speed = _speed ,weight = _weight ;@end
在使用@property为多个成员变量声明setter和getter方法时,必须要成员变量类型一致。
-------------------------------------------------------------------------------------------------
3.@property即充当成员变量的setter和getter方法的声明,也充当setter和getter方法的定义
此时可以不用@synthesize关键字定义方法
例:
Person.h
#import <Foundation/Foundation.h>@interface Person : NSObject{ int _speed; int _weight;}@property int speed,weight;//这里为 _speed, _weight声明setter 和getter方法,所以 _speed和 _weight的类型要一直,同时会在类的定义中实现这两个成员变量的setter和getter方法@end
-------------------------------------------------------------------------------------------------
Person.m
#import "Person.h"@implementation Person//因为在类声明中使用了@property进行了setter和getter方法的声明,同时也实现了setter和getter方法,所以这里可以不需要再实现setter和getter方法@end
-------------------------------------------------------------------------------------------------
main.m
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]){ Person *p = [Person new]; [p setSpeed:100]; //这里可以看出, @property自动为成员变量_speed生成了 setter方法 NSLog(@"速度: %d",[p speed]); return 0;}
4.@property自动生成成员变量,且为其生成setter和getter方法的声明,并且为其实现setter和getter方法
不过自动生成的成员变量为私有的变量,且是在.m文件中声明的
Person.h
#import <Foundation/Foundation.h>@interface Person : NSObject@property int weight,speed;//@property自动生成 _weight和_speed 的成员变量,并为其声明 setter和 getter方法且实现这两个方法@end
---------------------------------------------------------------------------------------------
Person.m
#import "Person.h"@implementation Person@end
-----------------------------------------------------------------------------------------------
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]){ Person *p = [Person new]; p.weight = 40;//采用点语法调用 setWeight [p setSpeed:100]; NSLog(@"体重: %d,速度: %d",[p weight],p. speed); return 0;}
上面的代码进行调试后可以发现在Person对象中有_weight和_speed两个成员变量
-------------------------------------------------------------------------------------------------
@synthesize关键字
1.这个关键字,必须要结合@property关键字使用
格式为:@synthesize property ;
标准格式为:@synthesize property = 成员变量名 ,property = 成员变量名2..................
后面的property就是在类声明文件中的@property的值,将作为getter和setter方法名称(setter方法:set+@property的值首字母大写),成员变量名表示在生成setter和getter方法时,给成员变量赋值和返回成员变量。
2.会自动生成setter和getter方法的实现,并访问age成员变量
@synthesize age = _age;
会自动生成下面的代码:
- (void) setAge:(int) age
{
self->_age = age;
}
- (int) age
{
return self->_age;
}
还可以@synthesize age = age,name = _name;
3.如果成员变量_name不存在,则会自动生成一个@private的成员变量_name
1.@synthesize的基本使用
例:
Person.h
#import <Foundation/Foundation.h>@interface Person : NSObject{ int _age;}@property int age;// 这一句表示声明了 setAge和 age方法@end
------------------------------------------------------------------------------------------
Person.m
#import "Person.h"@implementation Person@synthesize age = _age ;// 这一句使用了声明类中 @property的值,通过这句可以生成成员变量 _age对应的 setter和 getter方法@end
-------------------------------------------------------------------------------------------
main.m
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]){ Person *p = [Person new]; [p setAge:20]; NSLog(@"年龄 %d",[p age]); return 0;}
从上面看,如果没有@synthesize,则Person的定义中是没有setter和getter方法的定义的,所以在main方法中运行时,会报错,但是 因为@synthesize自动生成了setter和getter方法的定义,所以可以调用setAge和age方法。
-----------------------------------------------------------------------------------------------
2.@synthesize同时为多个成员变量定义setter和getter方法:
注意,这些成员变量的类型必须要一致
Person.h
#import <Foundation/Foundation.h>@interface Person : NSObject{ int _speed; int _weight;}@property int speed,weight;//这里为 _speed, _weight声明setter 和getter方法,所以 _speed和 _weight的类型要一直@end
-----------------------------------------------------------------------------------------------
#import "Person.h"@implementation Person@synthesize speed = _speed ,weight = _weight ;// 同时为多个成员变量定义 setter和 getter方法,需要成员变量的类型一致@end
-----------------------------------------------------------------------------------------------
0 0
- 关键字@property和@synthesize
- 关键字@synthesize 和@property
- @property关键字和@synthesize关键字
- OC @property 和 @synthesize 关键字
- OC-@property和@synthesize关键字
- @property、@synthesize关键字和点语法
- Objective-C 【@property和@synthesize关键字】
- @property和@synthesize关键字的介绍
- @property、@synthesize关键字的用法
- OC关键字@Category@property@synthesize
- 关键字@property与@synthesize梳理
- OC学习小结之@property和@synthesize 关键字
- 黑马程序员--OC基础--@property和@synthesize关键字介绍
- OBJ-C @property和@synthesize关键字学习笔记
- 黑马程序员-用点语法,@property关键字和@synthesize关键字优化set和get方法
- 关键字retain copy assign nonatomic property synthesize
- 关于@synthesize 和 @dynamic 关键字
- @synthesize关键字介绍和使用
- 列变位法解密
- 焦点问题总结
- sealed trait Scala学习笔记-面向对象篇
- jQuery 操作DOM元素
- C++插入排序之二路插入(环与非环的比较)
- @property关键字和@synthesize关键字
- Linux xargs命令
- 装配线问题—类似于树形dp的解法
- 项目开发——你该注意什么?
- Grey's Anatomy第十季
- 集合元素的排列和组合
- @property和@private及在.m文件中声明变量的区别
- Linux中find常见用法示例
- 有关R关系网络图中init.igarph的生成