@property的属性
(属性帮我们封装了get和set方法!)
使用属性注意事项:
1.当属性名与成员变量名一样时,如果我们想保证成员变量有值,那么就需要在.m中加入@synthesize 变量名;
2.当属性名与成员变量名一样时,如果我们对成员变量的值不强求,但我们又想打印所赋的值,这时在.m里可以使用(_属性名) 或者self.属性名;
3.当定义一个属性时,会首先查找是否有以 _属性名 命名的成员变量,如果有,则默认对其进行set和get,如果没有,则隐式生成以_属性名命名的成员变量;
4.当我们使用属性时成员变量可以省略。
(当.h文件中的成员变量名不省略时 .m文件中的@synthesize 也不能省略!当成员变量名省略时@synthesize也可以省略)
可以使用属性来规定@property,设定的方式如下:
@property (attribute1[,attrubute2,...])。
举个例子:
@property (nonatomic,strong) NSString* name;
@property (nonatomic,assign) int a;
(1)、设置访问方法的名字
默认的getter和setter器的名称是和变量名关联的,一定是setVirableName和virableName,比如上面的变量age,setter是setAge,getter是age。
可以通过设置@property中的setter和getter属性来修改setter和getter器的方法名。
getter=getterName
setter=setterName
举个例子:@property (getter=show1,setter=show2:)int age;//现在,它的getter和setter的方法名字就变了
注意:如果你设置了readonly属性的话,那么你就不应该设置setter属性,要不然会给出一个编译器的警告。
(2)、设置只读或读写
下面两个属性很好理解,
readwrite:表示既有getter,也有setter
readonly:表示只有getter,没有setter
这两个属性是互相排斥的,只能存在一个。
例:(使用set和get)
类接口:
#import <Foundation/Foundation.h>
@interface AudiCar : NSObject
{ NSString *color;
float price;
int seat;
}
-(void)setColor:(NSString *)newcolor;
-(void)setPrice:(float)newprice;
-(void)setSeat:(int)newseat;
-(NSString*)color;
-(float)price;
-(int)seat;
@interface AudiCar : NSObject
{ NSString *color;
float price;
int seat;
}
-(void)setColor:(NSString *)newcolor;
-(void)setPrice:(float)newprice;
-(void)setSeat:(int)newseat;
-(NSString*)color;
-(float)price;
-(int)seat;
@end
类实现:
#import "AudiCar.h"
@implementation AudiCar
-(void)setColor:(NSString *)newcolor
{
color = newcolor;
}
-(void)setPrice:(float)newprice
{
price = newprice;
}
-(void)setSeat:(int)newseat
{
seat = newseat;
}
-(NSString*)color
{
return color;
}
-(float)price
{
return price;
}
-(int)seat
{
return seat;
}
@implementation AudiCar
-(void)setColor:(NSString *)newcolor
{
color = newcolor;
}
-(void)setPrice:(float)newprice
{
price = newprice;
}
-(void)setSeat:(int)newseat
{
seat = newseat;
}
-(NSString*)color
{
return color;
}
-(float)price
{
return price;
}
-(int)seat
{
return seat;
}
@end
主程序:
#import <Foundation/Foundation.h>
#import"AudiCar.h"
int main(int argc, const char * argv[])
{ @autoreleasepool
{
AudiCar *car = [[AudiCar alloc]init];
[car setColor:@"yellow"];
[car setPrice:45000.350000];
[car setSeat:7];
NSLog(@"颜色为:%@", [car color]);
NSLog(@"价格为:%.2f",[car price]);
NSLog(@"座位为:%d", [car seat]);
}
return 0;
#import"AudiCar.h"
int main(int argc, const char * argv[])
{ @autoreleasepool
{
AudiCar *car = [[AudiCar alloc]init];
[car setColor:@"yellow"];
[car setPrice:45000.350000];
[car setSeat:7];
NSLog(@"颜色为:%@", [car color]);
NSLog(@"价格为:%.2f",[car price]);
NSLog(@"座位为:%d", [car seat]);
}
return 0;
}
运行结果:
颜色为:yellow
价格为:45000.35
价格为:45000.35
座位为:7
用属性的例子:
类接口:
#import <Foundation/Foundation.h>
@interface AudiCar : NSObject
{
}
@property NSString *color;
@property float price;
@property int seat;
-(void)introduction;
@interface AudiCar : NSObject
{
}
@property NSString *color;
@property float price;
@property int seat;
-(void)introduction;
@end
类实现:
#import "AudiCar.h"
@implementation AudiCar
-(void)introduction
{
NSLog(@"我这辆车是%@颜色,价值%.2f人民币,有%d个座位",_color,_price,_seat);
}
@implementation AudiCar
-(void)introduction
{
NSLog(@"我这辆车是%@颜色,价值%.2f人民币,有%d个座位",_color,_price,_seat);
}
@end
主程序:
#import <Foundation/Foundation.h>
#import"AudiCar.h"
int main(int argc, const char * argv[])
{ @autoreleasepool
{
AudiCar *car = [[AudiCar alloc]init];
car.color = @"yellow";
car.price = 45000.350000;
car.seat = 7;
[car introduction];
}
return 0;
#import"AudiCar.h"
int main(int argc, const char * argv[])
{ @autoreleasepool
{
AudiCar *car = [[AudiCar alloc]init];
car.color = @"yellow";
car.price = 45000.350000;
car.seat = 7;
[car introduction];
}
return 0;
}
运行结果:
我这辆车是yellow颜色,价值45000.35人民币,有7个座位