#import <Foundation/Foundation.h>
@interface Person : NSObject
{
/*
成员变量作用域有四种:
[email protected]:能在程序中任何地方直接访问成员变量
[email protected]:能在当前类和子类中直接访问成员变量(默认情况下)
[email protected]:只能在当前类中直接访问成员变量(@property)
[email protected]:在同一框架中能直接访问成员变量
*/
@provate
int _age;
@protect
int _height;
@public
double _weight;
}
/*
@property语句的作用是自动生成setter和getter方法,自动生成_age(private),如果程序上有_age成员变量,就不会生成。同理如果程序上已经有了setter或getter方法,也不会生成,但如果系统上有了setter和getter方法,即使没有成员变量,也不会再自动生成
*/
@property int age;
@property int height;
@end
@implementation Person
// 构造方法是指初始化(init)对象的方法,通过重写init方法,可以使成员变量初始化不为0
- (void)init
{
if(self = [super init])
{
_age = 10;
}
return self;
}
@end
int main()
{
// id是万能指针,指向任意对象,它相当于NSObject
*。因为id本身包括*,所以使用id时不要再加上*,以下的id指向person对象
id p = [Person new];
// 因为weight是@public,所以它可以在程序的任意地方直接访问成员变量
p ->weight = 61.5;
// p.height是点语法相当于[p
setHeight:173],因为_height是@protect,在main中不能直接访问,所以用setter方法
p.height = 173;
// p.age是点语法相当于[p
setHeight:173],因为_age是@provate,在main中不能直接访问,所以用setter方法
p.age = 25;
/*
new方法包含两个步骤,一个步骤是alloc方法,一个步骤是init方法
1.第一个步骤+alloc方法,分配存储空间,返回内存地址,返回一个不可用的对象
2.第二个步骤-init方法,使不可用的对象初始化,返回一个初始化的对象
*/
// id p1 = [Person new];
id p1 = [[Person alloc] init];
// 通过结果可以知道age成员变量初始值不为0
NSLog(@"%d"p.age);
return 0;
}