先来给出声明
@property (参数1,参数2) 类型 名字;
第一个参数:
readwrite:读写 生成setter和getter方法
readonly:只读 生成getter方法
第二个参数:
copy:nsstring
strong:一般对象
weak:UI控件
assign:基本数据类型
@property (nonatomic,strong) <#type#> *<#property#>;
//属性就是类让类外可以访问成员变量
//属性就是成员变量的外部接口
我们要使用类中的成员变量,一种方法是通过方法名去设置和调用,另一种方法是通过@property属性,让类外的可以访问类内的成员变量
首先看通过方法访问类内成员变量
#import <Foundation/Foundation.h>
@interface Animals : NSObject
{
NSString *_animalName;
int age;
}
-(void)setAnimalName:(NSString *) animalName;
-(NSString *)getAnimalName;
@end
定义一个类,再来实现类#import "Animals.h"
#import "Animals.h"
@implementation Animals
-(void)setAnimalName:(NSString *)animalName
{
_animalName=animalName;
}
-(id)getAnimalName
{
return_animalName;
}
@end
最后在main函数类调用#import <Foundation/Foundation.h>
#import "Animals.h"
int main(int argc,const char * argv[]) {
@autoreleasepool {
//实例化对象cat
Animals *cat=[[Animalsalloc]init];
//通过setAnimalName方法去设置类中 NSString *_animalName的参数
[cat setAnimalName:@"猫"];
//获取类内的参数
NSString *name=[catgetAnimalName];
//输出
NSLog(@"这只动物叫%@",name);
}
return0;
}
分析代码 类Animals中的参数_animalName不是public类型的默认是 protected在mian函数中无法直接赋值获取参数,只能通过set和get函数去访问
接下来看@property属性会带来什么改变
#import <Foundation/Foundation.h>
@interface Animals : NSObject
{
NSString *_animalName;
int age;
}
@property(nonatomic,strong)NSString *animalName;
@end
main函数调用类内成员变量#import <Foundation/Foundation.h>
#import "Animals.h"
int main(int argc,const char * argv[]) {
@autoreleasepool {
Animals *dog=[[Animalsalloc]init];
dog.animalName=@"狗";
NSLog(@"这是一条%@",dog.animalName);
}
return0;
}
@property相当于set方法和get方法,缩减了代码
@property用于在类中的声明
@synthesize用于在.m类实现问价中声明
调用@property和@synthesize自动展开setter和getter方法