黑马程序员--OC自学笔记---03类方法、匿名类、封装、关系、重载、static

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


 

1.   类方法

1)        概述:类方法不需要你创建一个实例。

2)        + 表示类方法,就是类调用方法,不依赖于任何对象的方法

3)        - 表示实例(对象)方法,只能是对象可调用,依赖于任何对象的方法。

2.   类方法的使用

1)        [类名称  类方法名称]

2)        类方法可以和实例方法同名,这个不影响使用。

3)        类方法可以从父类继承而来,子类可以重写类方法

4)        类方法和实例方法一样在interface里声明,在implementation里实现

5)        类方法只能被向类发送类方法消息才被执行,向实例对象发送类方法是不能被触发执行的。

6)        在类方法里使用了self,这个self执行的类对象class object而不是实例对象instance object。

3.   类方法的优点

1)        节省内存空间,不用为创建对象而分配空间

2)        提高了效率,可以直接通过类名来找到调用的方法,而不用通过_isa指针的方式去找到要调用的方法

3)        作为工具方法

4.   类方法易犯错误

1)在类方法中使用了类的成员变量,是不允许的

5.   类方法和对象方法的比较

1)        对象方法

①  以-号开头

②  可以使用成员变量

③  用对象调用对象方法

④  对象方法可以调用当前对象或者其他对象的方法(是通过将对象作为参数传入方法)

⑤  可以使用self

2)        类方法

在类方法中可以调用其他的类方法:

①  可以直接使用本类类名或其他类名调用

②  可以使用self

③  以+号开头

④  不可以使用成员变量

⑤  用类名调用类方法

⑥  类方法中可以调用对象方法(是通过将对象作为参数传入方法或者创建一个对象)和类方法

⑦  类方法不能调用自己

6.   类方法应用场景

如果我们调用一个方法,该方法中不需要使用成员变量,那么我们可以将该方法声明为类方法

7.   匿名类使用

1)        使用匿名类访问实例变量,而且只能访问一次,以后再次访问,实际上是访问新的空间了,new一次就新创建一个空间。

 [Car new]->_speed = 100;

2)        使用匿名类,可以调用方法

[[Car new] stop];

3)        [[Car alloc] init];等同于[Car new];

8.   匿名类作为方法的参数

1)        优点:可以简化代码,方便方法调用

2)        缺点:匿名对象实例化以后,只能正确的使用成员变量一次

9.   封装

1)        setter方法(设置器)

①  方法名必须以set开头

②  set方法一定是一个对象方法

③  set后面跟上成员变量的名称去掉下划线,首字母大写,

-(void)setAge:(int)newAge;

④  返回值一定是void

⑤  一定要接收一个参数,而且参数类型需要和成员变量的类型一致

⑥  形参名不能和成员变量名一样

⑦  set方法的形参名,一般是去掉下划线的实例变量名

⑧  set方法中,一定要用形参变量给实例变量赋值

2)        getter方法(访问器)

①  get方法一定是一个对象方法

②  一定有返回值,返回值的类型和成员变量的类型一致

③  get方法的方法名,是去掉下划线的实例变量名

④  get方法一定没有参数

⑤  get方法的实现中,一定是返回实例变量的值

@interface Person:NSObject
{
   NSString*_name;
   int_age;
   float_height;
}
//set方法的声明
-(void)setName:(NSString *)name;
-(void)setAge:(int)age;
-(void)setHeight:(float)height;
//get方法的声明
-(NSString *)name;
-(int)age;
-(float)height;
@end
@implementation Person
//set方法的实现
-(void)setName:(NSString *)name{
   _name= name;
}
-(void)setAge:(int)age{
   _age= age;
}
-(void)setHeight:(float)height{
   _height= height;
}
//get方法的实现
-(NSString *)name{
   return_name;
}
-(int)age{
   return_age;
}
-(float)height{
   return_height;
}
@end

10. 组合模式简介

1)        定义:把具有相同基类类型对象组合到树形结构中,以表示“部分—整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

组合模式使得树形结构中德尔每个节点都具有相同的抽象接口,整个结构可作为一个统一的抽象结构使用,而不暴露其内部表示。每个节点的任何操作,可以通过抽象积累中定义的相同接口来进行。

2)        何时使用组合模式

想把对象抽象成树形结构,具有“部分—整体”的层次关系,想让客户端统一处理组合中的对象

3)        iOS中使用组合模式

在Cocoa Touch框架中,UIView对象被组合成一个树形结构,UIView对象可以包含其他的UIView对象。这种组合方式便于用于事件处理和动作消息。

4)        组合模式优缺点

客户端可以统一的使用组合对象或单个对象,而组合结构不暴露其内部表示。

可以很容易在组合体内假如具有相同抽象类型的对象,客户端不必因为加入了新的对象而更改代码。

5)        组合模式(Composite)与装饰模式(Decorator)

Composite模式和Decorator模式虽然逻辑完全不同,但是从类图中可以看到它们有着相似的结构,Composite模式重在构造类,而Decorator模式重在不生成子类即可给对象添加职责。所以两种模式侧重点不一样,Decorator模式重在修饰,而Composite模式重在表示。

11. 依赖关系

1)        A对象作为B对象的局部变量或是方法的形参,B依赖于A,这时我们称A与B之间存在一种依赖关系。

2)        面向对象设计:

耦合度:当修改一个对象的时候,对另外一个对象的影响程度

低耦合:当修改一个对象的时候对其他对象影响比较小

高内聚:一个对象仅仅做自己相关的事情

面向对象设计原则:单一职责原则

12. 关联关系

1)        关联关系,HasA关系:当一个对象拥有另外一个对象的时候。

当B对象为A对象的成员变量的时候,B对象与A对象之间存在一种关联关系。

2)        关联关系的耦合度高于依赖关系

13. 方法重载

1)        方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。

2)        OC中没有严格的方法重载,在OC中,方法名不允许相同。

14. OC中static关键字的使用

1)        实例变量不能被static修饰

2)        也不能用static修饰方法

3)        可以用static修饰局部变量,称为静态局部变量,延长生命周期

4)        可以用static修饰全局变量,静态全局变量,只能在当前文件中使用

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌影~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值