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;
(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个座位
感谢您的访问!
若对您有帮助或有兴趣请关注博客:http://www.cnblogs.com/Rong-Shengcom/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?