------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
众所周知面向对象有三大特征:封装、继承和多态
一、对象的声明和实现
在OC的对象的声明和实现中 @interface和@implementation的分工如下图所示
@interface就好像暴露在外面的时钟表面
@implementation就好像隐藏在时钟内部的构造实现
二、对象的封装
前期写到了对象的声明的时候成员变量前加上@public保证指针可以间接的修改对象的成员变量。这样对象就可以被随意的赋值,这样是很危险的一件事。
在开发过程中,考虑到安全性要求,我们一般不在成员变量名前面使用@public、@protected等关键字修饰,而是使用Set方法来为对象提供成员变量的值。在set方法的内部也可以对一些不合理的赋值进行筛选过滤。
三、set方法
1、作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值
2、命名规范:
(2)Set后面跟上成员变量的名称,首字母大写
(3)返回值一定是void
(4)一定要接收一个参数,而且参数类型需要和成员变量的类型一致
(5)形参名不能喝成员变量名一样(苹果官方推荐成员变量名前加_以示区分)
3、使用set方法的好处
(1)不让数据暴露在外,保证了数据的安全性
(2)对设置的数据进行过滤
4、set方法实现
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
//定义成员便令
int _age;
}
//set方法
- (void)setAge:(int)age;
//打印方法测试
- (void)print;
@end
@implementation Person
-(void)setAge:(int)age
{
-age = age;
}
- (void)print
{
NSLog(@"age=%d",_age);
}
@end
int main()
{
Person *p = [Person new];
[p setAge:10];
[p print];
return 0;
}
四、get方法
1、Get方法的作用:为调用者返回对象内部的成员变量
2、命名规范:
(2)方法名和成员变量名一样
(3)不需要接收任何参数
3、get方法实现
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
//定义成员变量
NSString *_name;
}
//get方法
- (void)setName:(NSString *)name;
//set方法
- (NSString *)name;
@end
@implementation Person
- (void)setName:(NSString *)name
{
_name = name;
}
- (NSString *)name
{
return _name;
}
@end
int main()
{
Person *p = [Person new];
[p setName:@"chenfei"];
NSLog(@"%@",[p name]);
return 0;
}
五、self关键字
Self是一个指针,谁调用了当前方法,self就指向谁
********出现在对象方法中,就代表着当前对象,出现在类方法中,就代表着当前类********
********出现在对象方法中,就代表着当前对象,出现在类方法中,就代表着当前类********
Self的用途:
(2)[self 方法名];可以调用其他的对象方法或者是类方法