012.private protect public 访问控制符
2015-07-21 21:11
459 查看
---------------
main.m
---------------
#import
<Foundation/Foundation.h>
@interface
FKPerson : NSObject
{
@private
NSString* _name;
int
_age;
}
- (void) setName:
(NSString*) name;
- (NSString*) name;
- (void) setAge:(int)
age;
- (int) age;
@end
@implementation
FKPerson
- (void) setName:
(NSString*) name
{ //
使用set方法为成员变量赋值的优势在于,可以在方法中添加筛选机制,屏蔽不合理的值
if
([name length] >
6 || [name length] <
2)
{
NSLog(@"您设置的人名不符合要求");
return;
}
else
{
_name = name;
}
}
- (NSString*) name
{
return _name;
}
- (void) setAge:(int)
age
{
if(_age != age)
{
if
(age >
100 || age <
0)
{
NSLog(@"您设置的年龄不合法");
return;
}
else
{
_age = age;
}
}
}
- (int) age
{
return _age;
}
@end
int
main()
{
FKPerson* p = [[FKPerson alloc] init];
NSLog(@"未能设置age成员变量时:%d",
[p age]);
[p setAge:30];
NSLog(@"成功设置_age成员变量后:%d",
[p age]);
[p setName:@"李白"];
NSLog(@"成功设置_name成员变量后:%@",
[p name]);
}
一、编写本节代码的具体步骤:
1.可仿照第二章001节的代码编写步骤,可以把类的接口文件,类的实现文件写在main.m文件中。
二、本节代码涉及到的知识点:
1.@public (公开的) 在有对象的前提下,任何地方都可以直接访问
@protected (受保护的) 只能在当前类和子类的对象方法中访问
@private (私有的) 只能在当前类的对象方法中才能直接访问
@package (框架级别的) 处于同一个框架中相当于@public,在框架外部相当于@private
2.默认情况下,在@interface中定义的成员变量的权限是protect
在@implementation中定义的成员变量的权限是private
3.如果我们把所有的成员变量都用@public来修饰,那我们就不必写set、get方法了,这样岂不省事?
问题是,这样一来,我们就无法阻止外部程序胡乱修改成员变量的值。
4.编写set、get方法,要遵循很多独特的编写规范。
不过,由于set、get方法可以通过Xcode自动生成,所以那些编写规范不记也罢。
main.m
---------------
#import
<Foundation/Foundation.h>
@interface
FKPerson : NSObject
{
@private
NSString* _name;
int
_age;
}
- (void) setName:
(NSString*) name;
- (NSString*) name;
- (void) setAge:(int)
age;
- (int) age;
@end
@implementation
FKPerson
- (void) setName:
(NSString*) name
{ //
使用set方法为成员变量赋值的优势在于,可以在方法中添加筛选机制,屏蔽不合理的值
if
([name length] >
6 || [name length] <
2)
{
NSLog(@"您设置的人名不符合要求");
return;
}
else
{
_name = name;
}
}
- (NSString*) name
{
return _name;
}
- (void) setAge:(int)
age
{
if(_age != age)
{
if
(age >
100 || age <
0)
{
NSLog(@"您设置的年龄不合法");
return;
}
else
{
_age = age;
}
}
}
- (int) age
{
return _age;
}
@end
int
main()
{
FKPerson* p = [[FKPerson alloc] init];
NSLog(@"未能设置age成员变量时:%d",
[p age]);
[p setAge:30];
NSLog(@"成功设置_age成员变量后:%d",
[p age]);
[p setName:@"李白"];
NSLog(@"成功设置_name成员变量后:%@",
[p name]);
}
一、编写本节代码的具体步骤:
1.可仿照第二章001节的代码编写步骤,可以把类的接口文件,类的实现文件写在main.m文件中。
二、本节代码涉及到的知识点:
1.@public (公开的) 在有对象的前提下,任何地方都可以直接访问
@protected (受保护的) 只能在当前类和子类的对象方法中访问
@private (私有的) 只能在当前类的对象方法中才能直接访问
@package (框架级别的) 处于同一个框架中相当于@public,在框架外部相当于@private
2.默认情况下,在@interface中定义的成员变量的权限是protect
在@implementation中定义的成员变量的权限是private
3.如果我们把所有的成员变量都用@public来修饰,那我们就不必写set、get方法了,这样岂不省事?
问题是,这样一来,我们就无法阻止外部程序胡乱修改成员变量的值。
4.编写set、get方法,要遵循很多独特的编写规范。
不过,由于set、get方法可以通过Xcode自动生成,所以那些编写规范不记也罢。
相关文章推荐
- Python中choice用法与三元操作
- ./configure报错mv: cannot move './confsjjYiM/out' to 'cmake/Makefile': Permission denied
- BZOJ 1303: [CQOI2009]中位数图( )
- android LinearLayout设置selector不起作用解决
- LeetCode学习笔记
- 50个强大的Python模块
- UVa 10623 - Thinking Backward (平面图的欧拉公式)
- 00-自测3. 数组元素循环右移问题 (20)
- UVA11426 GCD - Extreme (II) 小于n的数对的gcd之和
- LeetCode 7 Reverse Integer 这道题被血虐
- TCP三次握手详解!
- 杭电1860 统计字符
- scikit-learn:4.2. Feature extraction(特征提取,不是特征选择)
- ueditor使用注意事项
- Web前端开发基础 第四课(CSS小技巧)
- 点击UITableView的cell展开收缩
- 人教版九年级数学的“词汇”中英文对照表翻译bug
- Hadoop2.5.2+ubuntu14.04+eclispe+hadoop2x-eclipse-plugin-master搭建开发环境
- 00-自测2. 素数对猜想 (20)
- 机房收费系统之思路