OC第二天—封装
cd /Applications/Xcode.app
sudo chown -hR root:wheel Contentss
封装的目的:就是为了达到高内聚低耦合;
内聚:模块内部各部分之间的关联程度;
耦合:模块与模块之间的关联程度;
内聚和耦合有一个条件改变,必然会导致另一个条件改变(耦合低了,内聚必然增高)(eg:甲乙城市的例子);
Person
: NSObject
{
//实例变量可见度修饰的实例变量范围:从书写的哪一行开始,到下一个修饰符结束,或者碰到大括号结束;
@public
NSString
*_name;
@protected//被protected被保护的,
修饰的实例变量只能在内部和子类中直接访问。直接就是通过实例变量名来访问
NSInteger
_age;
NSString
*_sex;
@private
//私有的,被private
修饰的实例变量 只能在类的内部直接访问 子类中也不可以访问
NSString
*_clour;}
set 方法
号开头
3>方法名一定以set
开头,后面跟上实例变量去掉下划线并且首字母大写
方法
)age;
方法
(NSString
*)sex;
(void)setClour:(NSString
*)clour;
1>对象方法,以 - 开头
2>一定有返回值,且返回值类型要和实例变量的类型保持一致
3>方法名实例变量去掉下滑线
(void)setSex:(NSString
*)sex;
Person
- (void)setAge:(NSInteger
)age{
//通过外界传输的参数给实例变量赋值
_age
=
age;
- (void)setSex:(NSString
*)sex{
_sex
=
sex;
}
- (NSInteger)age{
//get方法返回的是实例变量
return
_age;
(NSString
*)sex{
//get方法返回的是实例变量
return
_sex;
(void)setClour:(NSString
*)clour{
_clour
=
clour;
}
- (NSString
*)clour{
return
_clour;
Person
*p =
[[Person
alloc]init];
p ->_name
=
@"索宁师妹";
//调用_age
的setter方法
[p setAge:18];
//调用_sex的setter方法
[p setSex:@"妖"];
//调用_age的getter方法
NSInteger
pAge
= [p age];
NSLog(@"年龄:%ld",pAge);
NSLog(@"年龄是:%ld",[p
age]);
//调用_sex的getter方法
NSString
*pSex
= [p sex];
NSLog(@"性别是:%@",pSex);
NSLog(@"性别是:%@",[p
sex]);
->_clour = @"黄种人”; error!!!
[p setClour:@"绿色"];
NSLog(@"%@",[p
clour]);
@public
修饰的实例变量虽然可以在类的内部直接访问,但是它破坏了类的封装思想,所以以后祥哥建议不要使用
1》点语法后面有赋值运算符(=)的时候调用的是实例变量的 setter
方法,后面没有赋值运算符(=)的时候用的是实例变量的getter 方法;
2》点语法知识系统提供一种快速调用setter 和getter 方法的快捷方式,只有写了实例变量的
setter 和 getter 方法才能使用点语法;
Student :
NSObject
//实例变量
{
NSString
*_name;//名字
NSString
*_sex;//性别
NSString
*_clour;//肤色
NSInteger
_age;//年龄
CGFloat
_weight;//体重
可以设置只写的
//
@private
NSInteger
_number;//学号
可以设置只读的
}
//重写父类的init方法
(id)init;
(NSInteger)number;
(void)setWeight:(CGFloat)weight;
- (NSInteger)number{
return
_number;
}
//由于体重是学生的密码,此时只提供setter方法
- (void)setWeight:(CGFloat)weight{
_weight
=weight;
",stu.number);
stu.weight
=
50.0;
类方法的好处和使用场合:不依赖于对象,执行效率高,能使用类方法解决的问题尽量使用类方法;
Calculator :
NSObject
//计算两个数的和
+ (CGFloat)oneNumber
: (CGFloat)number
plusOtherNumber : (CGFloat)OtherNumber;
//计算两个数的和
(CGFloat)oneNumber
: (CGFloat)number
plusOtherNumber : (CGFloat)OtherNumber;
Calculator
//计算两个数的和
+ (CGFloat)oneNumber
: (CGFloat)number
plusOtherNumber : (CGFloat)OtherNumber{
return
number +OtherNumber;
}
//计算两个数的和
- (CGFloat)oneNumber
: (CGFloat)number
plusOtherNumber : (CGFloat)OtherNumber{
return
number +OtherNumber;
}
CGFloat
result = [Calculator
oneNumber:34.0
plusOtherNumber:56.0];
NSLog(@"%.2lf",result);
//调用计算器的对象方法
Calculator
*cal = [[Calculator
alloc]init];
result =
[cal
oneNumber:50.0
plusOtherNumber:50.0];
NSLog(@"%.2lf",result);
Boy : NSObject
NSString
*_name;//名字
NSString
*_gender;//性别
NSInteger
_age;//年龄
CGFloat
_height;//身高}
(id)init;
(id)initWithName
: (NSString
*)name;
//遵循小驼峰命名法
- (id)initWithName:(NSString
*)name
gender : (NSString
*)gender
age : (NSInteger)age
height : (CGFloat)height;
(void)setName
: (NSString
*)name;
(NSString
*)name;
(void)setGender
: (NSString
*)gender;
(NSString
*)gender;
(void)setAge
: (NSInteger)age;
(NSInteger)age;
(void)setHeight
: (CGFloat)height;
(CGFloat)height;
Boy
- (id)init{
_name
=
@"俊强";
_gender
=
@"纯爷们";
_height
=
180;
return
self;
}
- (id)initWithName:(NSString
*)name
gender : (NSString
*)gender
age : (NSInteger)age
height : (CGFloat)height{
//使用方法中的参数给实例变量赋值
_name
= name;
_gender
= gender;
_age
= age;
_height
= height;
return
self;
}
- (id)initWithName
: (NSString
*)name{
_name
= name;
return
self;
}
- (void)setName
: (NSString
*)name{
_name
= name;
}
- (NSString
*)name{
return
_name;
}
- (void)setGender
: (NSString
*)gender{
_gender
= gender;
}
- (NSString
*)gender{
return
_gender;
}
- (void)setAge
: (NSInteger)age{
_age
= age;
}
- (NSInteger)age{
return
_age;
}
- (void)setHeight
: (CGFloat)height{
_height
= height;}
- (CGFloat)height{
return
_height;
*b = [[Boy
alloc]init];
NSLog(@"%@
%@ %ld %.2lf",b.name,b.gender,b.age,b.height);
//部分自定义
Boy
*b1 = [[Boy
alloc]initWithName:@"李梦"];
NSLog(@"%@
%@ %ld %.2lf",b1.name,b1.gender,b1.age,b1.height);
//全部自定义
Boy
*b2 = [[Boy
alloc]initWithName:@"土川"
gender:@"妖"
age:23
height:16];
NSLog(@"%@
%@ %ld %.2lf",b2.name,b2.gender,b2.age,b2.height);
OC第二天—封装的更多相关文章
- OC第二课
主要内容:实例变量可见度.方法 一.实例变量可见度 public(共同拥有的):实例变量能够在类的内部和外部使用 protected(受保护的.默认的):实例变量仅仅能在该类及其子类中使用 priva ...
- OC第二节 —— NSString和NSMutableString
1.为什么需要NSString对象 答:在OC中创建字符串时,一般不使用C的方法, 因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方, 在Cocoa中NSStri ...
- OC - 31.通过封装的自定义布局快速实现商品展示
概述 实现效果 设计思路 采用MVC架构,即模型—视图-控制器架构 使用MJExtension框架实现字典转模型 使用MJRefresh框架实现上拉和下拉刷新 上拉刷新,加载新的数据 下拉刷新,加载更 ...
- OC - 30.如何封装自定义布局
概述 对于经常使用的控件或类,通常将其分装为一个单独的类来供外界使用,以此达到事半功倍的效果 由于分装的类不依赖于其他的类,所以若要使用该类,可直接将该类拖进项目文件即可 在进行分装的时候,通常需要用 ...
- OC对象:封装、继承、多态的使用举例一
// 该代码在网上找的视频中的例子,感觉很适合类和对象分不清楚的同学参考,仅供学习分享,谢谢 // 创建一个Pointtest类,用属性x.y表示点的坐标位置,求两点之间的距离,使用两种方法:类方法和 ...
- 《Java入门第二季》第二章 封装
什么是java中的封装1.封装的概念:隐藏信息.隐藏具体的实现细节. 2.封装的实现步骤: 1)修改属性的可见性,private.2)创建修改器方法和访问器方法,getXXX/setXXX.(未必一定 ...
- OC通讯录选择封装
ContactsService.h代码 #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> //block返回选 ...
- O-C相关05:方法的封装.
前言:在 OC 中进行封装, 就是实现设置实例变量和获取实例变量数据的方法, 常常称为 setter 方法和 getter 方法. 或称为 get set 读写器. 1,setter 方法 sette ...
- OC中的__attribute__的使用
简介: 在IOS9.2官方文档中Attributes的描述如下,简单明了: Attributes provide more information about a declaration or typ ...
随机推荐
- chrome浏览器不兼容jQuery Mobile问题解决
最近在学习jQuery Mobile.第一次运行例子的时候发现chrome总是等待,查看后台报错.错误如下所示: 最后在stackoverflow上找到一个解决方案:将以下代码放在 jquery.mo ...
- JAVA面向对象-----成员内部类的访问方式
成员内部类的访问方式 1.内部类可以直接访问外部类的成员属性.(孙悟空相当于内部类飞到牛魔王的肚子里面去). 2.外部类需要访问内部类的成员属性时需要创建内部类的对象. 1.在外部类的成员函数中创建内 ...
- PHP学习(1)——我为什么要学PHP
PHP简介 PHP是一种服务器端的脚本语言,特别适合做web开发.高效.灵活.实用是PHP的特点.PHP最开始是Personal Home Page的缩写,后来正式更名为了"PHP:Hype ...
- Redis 学习笔记4: Redis 3.2.1 集群搭建
在CenOS 6.7 linux环境下搭建Redis 集群环境 1.下载最新的Redis版本 本人下载的Redis版本是3.2.1版本,下载之后,解压,编译(make): 具体操作可以参考我的博文:R ...
- VIM编辑器操作命令积累
开始学习VIM编辑器了,计划着每周学习几个新命令,记录在本篇博客中. 1.第一次接触 vi demo.txt 进入Normal模式查看文本 i 进入Insert模式插入内容,编辑文本 nG n代表行号 ...
- Django 表单校验 表单字段设置 自定义表单校验规则
今天看到了一篇非常好的博文,拿来和大家分享一下. 内容包括了: 用户注册时输入数据的校验 使用widget进行字段设置 实现自定义的校验规则 参考自下面的这篇文章
- UNIX环境高级编程——初始化一个守护进程
#include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h&g ...
- SpringMVC源码分析--容器初始化(五)DispatcherServlet
上一篇博客SpringMVC源码分析--容器初始化(四)FrameworkServlet我们已经了解到了SpringMVC容器的初始化,SpringMVC对容器初始化后会进行一系列的其他属性的初始化操 ...
- HTML5中 HTML列表/块/布局 韩俊强的博客
从简单到复杂HTML5详解:每日更新关注:http://weibo.com/hanjunqiang 新浪微博! 1.HTML列表 1.有序 2.无序 3.有序star属性 4.有序无序列表 代码: ...
- How to Find the Self Service Related File Location and Versions
How to Find the Self Service Related File Location and Versions (文档 ID 781385.1) In this Document ...