oc中实例变量的三种可见度/oc中的方法
2014-08-01 14:17
441 查看
1 oc中实例变量的三种可见度
在objective-c中,实例变量共有四种可见度,最常用的三种分别是:public、protected和private。
protected为默认,private根据需求使用。对于默认可见度的实例变量,可以不使用关键字修饰,也可以使用@protected修饰。但是,不管实例变量是哪种可见度,在对象内部,即类的实现中,都可以使用。
public和protected的区别。如果对象的实例变量是默认可见度的,在外部,无法通过“->”操作实例变量,会出现car->_carBrand。
实例变量是属于某个对象的,如果使用public修饰,在外部就可以任意设置和读取某个实例变量的值,这个不符合面向对象的特性--封装。
如果需要在外部获取实例变量的值,需要定义一个方法,带返回值,返回值类型就是需要获取的实例变量的类型。通过这个方法,只能获取一个实例变量的值。
(1)分类:方法分为两类:类方法和实例方法。
类方法:只有类能使用。以‘+’开头,+(id)alloc;
[AudiCar alloc];
实例方法:只有对象能使用。以‘-’开头,-(void)study;
[student study];
(2)命名规则:采用“驼峰命名法”,第一个单词首字母小写,后面的单词首字母大写。
(3)声明:
- (void) study : (NSString*) course;
方法 返回 方法 参数
类型 类型 参数 类型 参数名
(4)确定方法名:去掉方法类型、返回值、参数类型、参数名,剩下的部分就是方法名,OC中方法不能重名,但是相同名字的实例方法和类方法并不能算是同一个方法。
2.2 定义带参数方法和带返回值方法
(1)定义带参数的方法,实现在外部通过方法实现对实例变量的赋值操作。
类的实现:
- (void)setCarBrand:(NSString *)brand;
{
_carBrand = brand;
}
- (void)setCarBrand:(NSString *)brand carColor: (NSString *)color
{
_carBrand = brand;
_carColor = color;
}
外部使用:
AudiCar * car =[[AudiCar alloc] init];
[car setCarBrand:@”奥迪” carColor:@”黑色”];
(2)定义带返回值的方法,实现在外部通过方法实现对实例变量的取值操作。
类的实现:
- (NSInteger)carPrice
{
return _carPrice;
}
外部使用:
AudiCar * car =[[AudiCar alloc] init];
NSLog(@”汽车的价格:%d”,[car carPrice]);
2.3 自定义初始化方法.
在init初始化方法中,只能进行一些默认初始化设置,如果想在初始化方法中根据需求进行初始化设置,例如:初始化AudiCar对象时,需要设置品牌和价格。可以通过自定义初始化方法实现。
-(id)initWithCarBrand:(NSString *)brand carPrice: (NSInteger)price
{
_carBrand = brand;
_carPrice = price;
return self;
}
外部使用:
AudiCar * car = [[AudiCaralloc] initWithCarBrand: @”奥迪” carPrice: 100];
NSLog(@”汽车的价格:%d”,[car carPrice]);
2.4方法的“声明”,“实现”,“执行”
(1)声明:
-(id)initWithCarBrand: (NSString*)brand carPrice: (NSInteger)price
(2)实现:
{
_carBrand = brand;
_carPrice = price;
return self;
}
(3)执行:
[car initWithCarBrand:@”奥迪” carPrice:100];给对象car发送消息,就会执行这个方法。
2.4 #import的作用。@class的作用。
(1)#import的作用是导入文件,相当于将文件的内容进行拷贝。例如:
#import “Teacher.h”
@interface Student:NSObject
{
Teacher * _myTeacher;
}
#import “Teacher.h”相当于将Teacher.h文件中的内容拷贝到Student.h文件中,这样可以得到Teacher.h文件中的所有信息。
#import 可以重复导入文件,不会报错。#include 不能重复导入文件,但是现在Xcode已经自动解决这个重复引用的问题。
(2)@class是告诉编译器,某个字段知识作为类名使用,类的接口的信息不知道。
@class “Teacher.h”
@interface Student:NSObject
{
Teacher * _myTeacher;
}
(3)使用#import时需要注意一个问题,避免出现循环引用。例如:
#import “Teacher.h”
@interface Student:NSObject
{
Teacher * _myTeacher;
}
#import “Student.h”
@interface Teacher:NSObject
{
Student * _myStudent;
}
这样会出现重复引用的问题。
在接口中:
在实现中
init初始化方法:
在objective-c中,实例变量共有四种可见度,最常用的三种分别是:public、protected和private。
protected为默认,private根据需求使用。对于默认可见度的实例变量,可以不使用关键字修饰,也可以使用@protected修饰。但是,不管实例变量是哪种可见度,在对象内部,即类的实现中,都可以使用。
public和protected的区别。如果对象的实例变量是默认可见度的,在外部,无法通过“->”操作实例变量,会出现car->_carBrand。
实例变量是属于某个对象的,如果使用public修饰,在外部就可以任意设置和读取某个实例变量的值,这个不符合面向对象的特性--封装。
如果需要在外部获取实例变量的值,需要定义一个方法,带返回值,返回值类型就是需要获取的实例变量的类型。通过这个方法,只能获取一个实例变量的值。
2. OC中的方法
2.1方法的分类、命名规则、声明,如何确定方法名(1)分类:方法分为两类:类方法和实例方法。
类方法:只有类能使用。以‘+’开头,+(id)alloc;
[AudiCar alloc];
实例方法:只有对象能使用。以‘-’开头,-(void)study;
[student study];
(2)命名规则:采用“驼峰命名法”,第一个单词首字母小写,后面的单词首字母大写。
(3)声明:
- (void) study : (NSString*) course;
方法 返回 方法 参数
类型 类型 参数 类型 参数名
(4)确定方法名:去掉方法类型、返回值、参数类型、参数名,剩下的部分就是方法名,OC中方法不能重名,但是相同名字的实例方法和类方法并不能算是同一个方法。
2.2 定义带参数方法和带返回值方法
(1)定义带参数的方法,实现在外部通过方法实现对实例变量的赋值操作。
类的实现:
- (void)setCarBrand:(NSString *)brand;
{
_carBrand = brand;
}
- (void)setCarBrand:(NSString *)brand carColor: (NSString *)color
{
_carBrand = brand;
_carColor = color;
}
外部使用:
AudiCar * car =[[AudiCar alloc] init];
[car setCarBrand:@”奥迪” carColor:@”黑色”];
(2)定义带返回值的方法,实现在外部通过方法实现对实例变量的取值操作。
类的实现:
- (NSInteger)carPrice
{
return _carPrice;
}
外部使用:
AudiCar * car =[[AudiCar alloc] init];
NSLog(@”汽车的价格:%d”,[car carPrice]);
2.3 自定义初始化方法.
在init初始化方法中,只能进行一些默认初始化设置,如果想在初始化方法中根据需求进行初始化设置,例如:初始化AudiCar对象时,需要设置品牌和价格。可以通过自定义初始化方法实现。
-(id)initWithCarBrand:(NSString *)brand carPrice: (NSInteger)price
{
_carBrand = brand;
_carPrice = price;
return self;
}
外部使用:
AudiCar * car = [[AudiCaralloc] initWithCarBrand: @”奥迪” carPrice: 100];
NSLog(@”汽车的价格:%d”,[car carPrice]);
2.4方法的“声明”,“实现”,“执行”
(1)声明:
-(id)initWithCarBrand: (NSString*)brand carPrice: (NSInteger)price
(2)实现:
{
_carBrand = brand;
_carPrice = price;
return self;
}
(3)执行:
[car initWithCarBrand:@”奥迪” carPrice:100];给对象car发送消息,就会执行这个方法。
2.4 #import的作用。@class的作用。
(1)#import的作用是导入文件,相当于将文件的内容进行拷贝。例如:
#import “Teacher.h”
@interface Student:NSObject
{
Teacher * _myTeacher;
}
#import “Teacher.h”相当于将Teacher.h文件中的内容拷贝到Student.h文件中,这样可以得到Teacher.h文件中的所有信息。
#import 可以重复导入文件,不会报错。#include 不能重复导入文件,但是现在Xcode已经自动解决这个重复引用的问题。
(2)@class是告诉编译器,某个字段知识作为类名使用,类的接口的信息不知道。
@class “Teacher.h”
@interface Student:NSObject
{
Teacher * _myTeacher;
}
(3)使用#import时需要注意一个问题,避免出现循环引用。例如:
#import “Teacher.h”
@interface Student:NSObject
{
Teacher * _myTeacher;
}
#import “Student.h”
@interface Teacher:NSObject
{
Student * _myStudent;
}
这样会出现重复引用的问题。
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *person1 = [[Person alloc] init];// 创建一个person对象 Person *person2 = [Person new]; // new等同于上边的alloc+init person1->_address = @"北京市海淀区"; person1->_hbby = @"生乒乓球"; // 通过方法设置了受保护的实例变量的值 [person1 setName:@"zhangsai"]; // 通过方法取出了受保护的实例变量的值 NSString *name = [person1 getName]; NSLog(@"name = %@",name); [person2 setName:@"chaochao" withAge:23 withAddress:@"beijing" setIsMayyied:NO]; NSLog(@"name = %@ ,age = %i , address = %@ , ismarried = %d",[person2 getName], [person2 getAge], person2->_address ,[person2 getIsMarried]); } return 0; }
在接口中:
#import <Foundation/Foundation.h> @interface Person : NSObject { // 声明实例变量 // 公开的 @public // 可以被随意访问,可见度高 NSString *_address; NSString *_hbby; // 受保护的 @protected // 可以被本类和子类访问,可见度中等 NSString *_name; int _age; // 私有的 @private NSString *_sex; // 性别 BOOL _isMarried; // 是否已婚 } // 设置name - (void)setName:(NSString *)name; // 一个冒号代表一个参数,小括号内部是参数类型 // 参数类型后边是参数名称 // 取出name的值 - (NSString *)getName; // 设置sex的值 - (void)setSex:(NSString *)sex; // 取出sex的值 - (NSString *)getSex; // 同时设置多个实例变量内容的方法 - (void)setName:(NSString *)name withAge:(int)age withAddress:(NSString *)address setIsMayyied:(BOOL)y; // 如何提取方法名:去除类型、返回值、参数类型、参数名、所有小括号 // 如上边的方法名是:setName:withAge:withAddress: // 设置age的值 - (void)setAge:(int) age; // 取出age的值 - (int)getAge; // 设置married的值 - (void)setIsMarried:(BOOL) y; // 取出married的值 - (BOOL)getIsMarried; @end
在实现中
#import "Person.h" @implementation Person // 实现设置name的方法 - (void)setName:(NSString *)name { _name = name; } // 实现取值方法 - (NSString *)getName { return _name; } // 实现设置age的方法 - (void)setAge:(int)age { _age = age; } // 实现取出age的方法 - (int)getAge { return _age; } // 实现设置sex的值 - (void)setSex:(NSString *) sex { _sex = sex; } // 实现取出sex的值 - (NSString *)getSex { return _sex; } // 实现同时设置多个实例变量的值的方法 - (void)setName:(NSString *)name withAge:(int)age withAddress:(NSString *)address setIsMayyied:(BOOL)y { _name = name; _age = age; _address = address; _isMarried = y; } // 设置marry的值 - (void)setIsMarried:(BOOL)y { _isMarried = y; } // 取出marry的值 - (BOOL)getIsMarried { return _isMarried; } @end
init初始化方法:
NSString *result = [[NSString alloc]initWithFormat:@"name = %@ age = %d address = %@", _name, _age, _address];
相关文章推荐
- OC中实例变量可见度、setter、getter方法和自定义初始化方法
- OC第二天-实例变量可见度,setter和getter方法,导入头文件 4000
- Oc(实例变量可见度与方法)(InstanceVariableAndMethod)
- 进击的KFC:OC(二)实例变量可见度、方法、setter、getter
- OC实例变量可见度 setter方法和getter方法
- OC 实例变量三种可见度相关
- (OC)基础第二讲:实例变量可见度、方法
- OC中实例变量可见度、setter、getter方法和自定义初始化方法
- OC中实例变量可见度、setter、getter方法和自定义初始化方法
- OC之实例变量可见度和方法
- OC2_实例变量可见度和方法
- 【OC学习-9】利用@property属性和@synthesize简化实例变量的存取器方法
- day2:实例变量可见度、方法、setter、getter
- oc面向对象—实例变量以及set get方法
- iOS开发学习第十四课——实例变量可见度、方法、setter、getter
- OC学习(二)实例变量的可见度和几种常用方法
- 1.实例变量可见度2.方法3.setter, getter
- OC第二讲成员变量可见度与方法——复合
- 02 实例变量可见度、方法
- 2015.07.08 OC 第二天 实例变量 方法