实例变量(InstanceVariable)
(一个对象会有自己独特的数据和别的对象不同,这些数据会保存在一些特殊的变量值中,这种变量叫实例变量。类的每个实例(对象)都有一份。)
用一个类,创建出了一个对象,那我们说这个对象就是此类的一个实例。一个类可以有很多的实例。每一个实例都拥有一份和其他实例不同的数据,这些数据保存在实例变量中。
实例变量可以定义在interface部分,也可以定义在implementation部分。
创建一个PropertyAndInstanceVariable项目,创建TRFraction类:
#import <Foundation/Foundation.h>
@interface TRFraction : NSObject //分数类
{
@public //不保护 ,但实例变量不应该公开,应该用@protected,默认保护,protected自己和子类可以访问
//定义实例变量
int n; //分子
int d; //分母
}
- (void) show;
@end
@implementation TRFraction
-(void) show
{
NSLog(@"%d/%d", n, d); //实例变量可直接访问,不需要写self,或self->n
}
//main.m中:
void test1()
{
TRFraction *f1 = [TRFraction alloc];
f1->n = 1;
f1->d = 2;
[f1 show];
TRFraction *f2 = [TRFraction alloc];
f2->n = 2;
f2->d = 3;
[f2 show];
}
int main(int argv, const char* argc)
{
@autoreleasepool{
test1();
}
}
//
// Student.h
// day02-2
//
//
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
//实例变量 保存值的
int _age;
char _sex;
float _salary;
}
//給实例变量赋值
//setter 属性名:int age
-(void)setAge:(int)age; //此age为参数
-(int)age;
-(void)setSex:(char)sex;
-(char)sex;
-(void)setSalary:(float)salary;
-(float)salary;
@end
//
// Student.m
// day02-2
//
//
#import "Student.h"
@implementation Student
{
int _level; //声明了一个私有的实例变量(放在.m中的实例变量是私有的)
}
-(void)getLevel{ //声明了一个私有的实例方法(放在.m中的实例变量是私有的)
NSLog(@"getLevel");
}
-(void)setAge:(int)age{
_age = age; //属性和实例变量的关系
NSLog(@"调用了setter方法");
}
-(int)age{
return _age;
}
-(void)setSex:(char)sex{
_sex = sex;
}
-(char)sex{
return _sex;
}
-(void)setSalary:(float)salary{
_salary = salary;
}
-(float)salary{
return _salary;
}
@end
//
// main.m
// day02-2
//
//
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Student* stu = [Student alloc];
//[stu setAge:20];
//NSLog(@"age:%d", [stu getAge]);
//[stu setSex:'M'];
//NSLog(@"sex:%c", [stu getSex]);
//[stu setSalary:6000.1];
//NSLog(@"salary:%.2f", [stu getSalary]);
stu.age = 18; //自动调用setter方法
NSLog(@"age:%d", stu.age); //自动调用getter方法
stu.sex = 'M'; //自动调用setter方法
int sex = stu.sex; //自动调用getter方法
NSLog(@"sex:%c", sex);
stu.salary = 12000.5; //自动调用setter方法
NSLog(@"salary:%.2f", stu.salary); //自动调用getter方法
}
return 0;
}