1 点语法
OC中点语法是对象成员set方法和get方法的一种简写形式. 使用更方便,更直观
//
// Person.h
// 点语法
//
// Created by LiuWei on 15/4/14.
// Copyright (c) 2015年 LiuWei. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
- (void)setAge: (int)age;
- (int)age;
@end
//
// Person.m
// 点语法
//
// Created by LiuWei on 15/4/14.
// Copyright (c) 2015年 LiuWei. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
@end
//
// main.m
// 点语法
//
// Created by LiuWei on 15/4/14.
// Copyright (c) 2015年 LiuWei. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
Person *p = [Person new];
p.age = 20; // 这段代码相当于 [p setAge:20];
NSLog(@"p.age = %i", p.age); // p.age 相当于 [p age];
return 0;
}
2 成员变量作用域
成员变量作用域修饰符的作用
@public 成员变量在任何地方都可以通过对象名或对象方法进行访问
@private 成员变量只能在当前类对象方法中访问, 子类的对象方法中无法访问
@protected 成员变量在当前类及子类对象方法中可以访问, 外部不能直接访问
//
// Person.h
// 成员变量访问作用域
//
// Created by LiuWei on 15/4/14.
// Copyright (c) 2015年 LiuWei. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
@public // 任何地方都可以对成员变量进行访问
int _age; // 年龄
@private // 只能在当前类的对象方法中使用
NSString *_name; // 姓名
@protected // 只能在本类及子类对象方法中使用,不能被外部直接调用,
double _weight; // 体重
// 如果没有加任何作用域修饰符 默认作用域为 @protected
double _heigh; // 身高
}
// _age的set和get方法
- (void)setAge: (int)age;
- (int)age;
// _name的set和get方法
- (void)setName: (NSString*)name;
- (NSString*)name;
// _weight的set和get方法
- (void)setWeight: (double)weight;
- (double)weight;
// _heigh的set和get方法
- (void)setHeigh: (double)heigh;
- (double)heigh;
@end
//
// Person.m
// 成员变量访问作用域
//
// Created by LiuWei on 15/4/14.
// Copyright (c) 2015年 LiuWei. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
- (void)setName:(NSString *)name
{
_name = name;
}
- (NSString *)name
{
return _name;
}
- (void)setWeight:(double)weight
{
_weight = weight;
}
- (double)weight
{
return _weight;
}
- (void)setHeigh:(double)heigh
{
_heigh = heigh;
}
- (double)heigh
{
return _heigh;
}
@end
//
// Student.h
// 成员变量访问作用域
//
// Created by LiuWei on 15/4/14.
// Copyright (c) 2015年 LiuWei. All rights reserved.
//
#import "Person.h"
@interface Student : Person
- (void)useName;
@end
//
// Student.m
// 成员变量访问作用域
//
// Created by LiuWei on 15/4/14.
// Copyright (c) 2015年 LiuWei. All rights reserved.
//
#import "Student.h"
@implementation Student
- (void)useName
{
// _name = @"huahua"; _name 在父类中被声明为@private 所以不能在子类对象方法中使用
NSLog(@"_name 在父类中被声明为@private 所以不能在子类对象方法中使用");
NSLog(@"_weight = %f _heigh = %f", _weight, _heigh); // _weight _heigh都是@protected作用域所以可以在子类方法中调用
}
@end
//
// main.m
// 成员变量访问作用域
//
// Created by LiuWei on 15/4/14.
// Copyright (c) 2015年 LiuWei. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
int main(int argc, const char * argv[])
{
Person *p = [Person new];
p.age = 20; // 这段代码相当于 [p setAge:20];
p->_age = 29; // _age成员变量可以在main中直接访问
p.name = @"无名";
p.weight = 55.3;
p.heigh = 1.78;
Student *s = [Student new];
s.age = 22;
s->_age = 21; // 父类中成员变量作用域属性设置为@public, 在子类中同样也是@public
s.name = @"小李"; // _name为@private 子类调用父类的setName方法,所以可以访问_name成员变量
s.weight = 48.9;
s.heigh = 1.81;
[s useName];
return 0;
}
父类方法,外部方法,子类方法, 可访问成员变量关系示意图