- 三种可见度和特点:
@public(公有的) : 实例变量可被任意操作
@protected(受保护的): 实例变量只能在该类和子类中进行访问
@private(私有的): 实例变量只能在该类中使用
如果不写,默认是@protected
实例代码:
@interface Person : NSObject{ // 公共的 @public NSString *_address; // 住址 NSString *_hobby; // 兴趣 // 受保护的 @protected NSString *_name; // 姓名 int _age; // 年龄 // 私有的 @private NSString *_sex; // 性别 }
@end
- 为什么我们很少使用@public?
a. 使用@public暴露了类内部的细节
b. 不符合面向对象的三大特性之一--封装 - 如果我们需要访问对象的私有属性或者受保护属性时怎么办?
通过方法来访问:
// Bank.h // 银行头文件
#import
@interface
Bank : NSObject {
CGFloat _money; // 存款 }
#pragma mark
存钱 - (void)saveMoney:(CGFloat) yuan;
#pragma mark
取钱 - (CGFloat)getMondy;
@end
// Bank.m // 银行实现文件
#import
"Bank.h" @implementation
Bank #pragma mrak
实现存钱方法 - (void)saveMoney:(CGFloat)yuan
{
_money = yuan; }
#pragma mark
实现取钱方法 - (CGFloat)getMondy
{
return _money; }
@end
// 这样,我们在对银行类进行存钱、取钱操作时,就可以直接访问银行的对象//
实例化银行对象 Bank
*bank = [[Bank alloc] init]; //
进行存钱操作 [bank
saveMoney:100.0f]; //
进行取钱操作 NSLog(@"%f", [bank
getMondy]);
- 方法分为两种:
a. 类方法:只能类使用。例如:+(id)alloc; // 注意:类方法中不能使用实例变量
b. 实例方法: 只能对象使用。例如:-(id)init; - 方法名组成部分:
方法类型标识符、返回值类型、参数形容词、参数类型、参数名称
类中不能出现同名的方法
“:”表示参数,不能省略 - 方法的使用:
在OC中没有“person调用sayHi”这种表述
在OC中使用消息发送机制:[接受者 方法]
正确描述:
a. person对象接收消息,即方法sayHi
b. person找到sayHi方法,并执行。 - 自定义初始化方法:
-(id)init 这个初始化方法只能给实例变量设置默认值,不灵活
-(id)initWithName: 自定义初始化方法,根据需求定义初始化方法。
- 基本介绍:
多个主见组合在一起,形成一个整体,然后使用整体进行工作,这种组合就叫复合
OC中,类的实例变量是由其他类型组成 - #import:
导入头文件,即将导入头文件中的内容,赋值到当前类
#import ""导入自定义类, #import <> 导入类库中的头文件
#import 功能类似C语言中的#include,但是可以避免头文件被重复包含
容易出现循环引用问题 - @class关键字:
标识字符串作为类名使用,无法导入类的接口内容。只是声明那是一个类,但是类中有什么内容不知道。
可以有效避免嵌套循环引用问题。
@interface Person : NSObject
{
}
// 自己写一个初始化方法
// 在创建对象的时候就给所有实例变量赋值
// 注意初始化方法的开头:initWith...
- (id)initWithAddress:(NSString *)address
// 设置全部实例变量的值的方法
- (void)setAddress:(NSString *)address
// 设置姓名的方法
// void setName(char *name);
- (void)setName:(NSString *)name;
// 一个冒号代表一个参数
// 冒号后面紧跟小括号,小括号内部是参数类型
// 类型后面,参数名称
// 取出姓名的值的方法
- (NSString *)getName;
// 同时设置多个实例变量内容的方法
- (void)setName:(NSString *)name
// 方法名(去除:类型、返回值、参数类型、参数名、所有小括号)
// setName:withAge:withAddress:
// - (void)setName:(NSString *)name
// 方法名:setName:::
// age的设置值和取值的方法
- (void)setAge:(int)age;
- (int)getAge;
// sex的设置值和取值的方法
- (void)setSex:(NSString *)sex;
- (NSString *)getSex;
// isMarried的设置值和取值的方法
- (void)setIsMarried:(BOOL)isMarried;
- (BOOL)getIsMarried;
@end
int main(int argc, const char * argv[])
{
}