// Person.h
// IOS150616_ObjectiveC_实例变量的作用域
//
// Created by qianfeng on 15/6/16.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
@protected //受保护的实例变量,在当前类里面是可以直接访问,在类外面不能直接访问
//但是可以通过方法调用间接访问,子类可以直接继承受保护的实例变量
NSString *_name;
NSInteger _age;
@private //私有的实例变量,在当前类里面是可以直接访问的,在类外面是无法直接访问的,
//但是可以通过调用方法间接访问,子类不可以继承私有的实例变量
float _weight;
float _height;
@public //共有的实例变量在类内类外都可以直接访问,子类也可以直接继承共有的实例变量
NSInteger _number;
}
//@property关键字默认展开的的实例(实际上是@synthesize展开的)变量是私有的;
@property (copy,nonatomic)NSString *name;
@property (assign,nonatomic)NSInteger age;
@property (assign,nonatomic)float weight;
@property (assign,nonatomic)float height;
//@property (assign,nonatomic)NSInteger number;
- (void)setNumber:(NSInteger)number;
- (NSInteger)number;
- (void)printNumber;
@end
// Person.m
// IOS150616_ObjectiveC_实例变量的作用域
//
// Created by qianfeng on 15/6/16.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)setNumber:(NSInteger)number
{
_number = number; //直接访问实例变量
}
- (NSInteger)number
{
return self->_number;
}
- (void)printNumber
{
NSLog(@"%ld",[self number]); //间接访问实例变量
}
@end
// main.m
// IOS150616_ObjectiveC_实例变量的作用域
//
// Created by qianfeng on 15/6/16.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *zhangSan = [[Person alloc] init];
//zhangSan->_name = @"xiaoZhang"; //这是无法访问的,_name是由protected修饰的
zhangSan.name = @"小张";
zhangSan.age = 23;
//zhangSan->_weight = 55.34; //这是无法访问的,_name是由private修饰的
zhangSan.weight = 55.34;
zhangSan.height = 177;
zhangSan->_number = 1234;
NSLog(@"name = %@,age = %ld,weight = %.3f,height = %.2f,number = %ld",zhangSan.name,zhangSan.age,zhangSan.weight,zhangSan.height,zhangSan.number);
}
return 0;
}