IOS ——OC——属性的使用可以优化get和set方法

@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;
 
如果你在@property设置了属性,如果你使用@synthesize ,那么它会自动帮你完成这些属性的实现,如果你是自己手动的去完成实现的话,那么,你必须自己写出这些属性的实现。

(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;
@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;
}
@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;
}
运行结果:
颜色为:yellow
价格为:45000.35
座位为:7
 
用属性的例子:
类接口:
#import <Foundation/Foundation.h>
@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);
}
@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;
}
运行结果:
我这辆车是yellow颜色,价值45000.35人民币,有7个座位
感谢您的访问! 若对您有帮助或有兴趣请关注博客:http://www.cnblogs.com/Rong-Shengcom/
原文地址:https://www.cnblogs.com/Rong-Shengcom/p/4935801.html