黑马程序员——OC—类方法及匿名类
来源:互联网 发布:淘宝店铺名称搜索排行 编辑:程序博客网 时间:2024/06/05 09:26
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ———
类方法及匿名类
1、类方法概述
实例方法就是一个方法,它在类的一个具体实例的范围内执行。也就是说,在你调用一个实例方法前,你必须首先创建类的一个实例。
而类方法,比较起来,也就是说,不需要你创建一个实例。
+表示类方法,就是类调用方法,不依赖于任何对象的方法。
-表示是实例(对象)方法,只能是对象可调用,依赖与于何对象的方法。
2、类方法的调用
[类名称 类方法名称];
3、类方法使用注意事项:
1)类方法可以和实例方法同名,这个并不影响使用,实例方法由实例对象访问调用,类方法要通过类来访问调用,不会有交叉相互影响。
2)类方法也可以是从父类继承而来,子类可以重写类方法,如description类方法就可以在子类里重新定义这个方法。
3)类方法和实例方法一样在interface里声明,在implementation里实现。
4)类方法智能被向类发送类方法消息才被执行,向实例对象发送类方法是不能被触发执行的。
5)在类方法里使用了self,这个self执行的类对象class Object而不是实例对象instance Object。
4、类方法的优点
1)节省内存空间
2)提高了效率
3)作为工具方法
5、类方法的易犯错误
1)在类方法中使用了类的成员变量
6、类方法与对象方法比较
1)对象方法:
以-号开头
可以使用成员变量
用对象调用对象方法
对象方法可以调用当前对象或者其他对象的方法(是通过将对象作为参数传入方法)如下
调用当前对象的其他方法:
调用其他对象的方法
对象方法可以调用类方法
2)类方法
以+开头
不可以使用成员变量
用类名调用类方法
类方法可以调用对象方法(是通过将对象作为参数传入方法)和类方法
类方法不可以调用自身,会造成死循环
同名方法的区别:
通过同名方法前面的+ - 号区分
7、OC类方法应用场景
如果我们调用一个方法,该方法中不需要使用成员变量,那么我们可以将该方法声明为类方法
@interface Calculator :NSObject
{
int _result;
int _num1;
int _num2;
}
//声明一个类方法用于计算两个数的和
+(int )sumNum1:(int )num1 andNum2:(int )num2;
@end
@implementation Calculator
//通过类方法计算两个数的和
+(int )sumNum1: (int )num1 andNum2:(int )num2 {
return num1 + num2;
}
@end
8、匿名类的概念
定义如下类:
#pragma mark 车类的声明
@interface Car :NSObject
{
@public
int _color;
}
- (void)run; //车启动
- (void)stop; //车停止
@end
#pragma mark 车类的实现
@implementation Car
//车启动
- (void)run{
NSLog(@“Car Start! color:%d”, _color);
}
//车停止
- (void)stop{
NSLog(@“Car Stop!”);
}
#pragma mark 人类的声明
@interface Person :NSObject
{
NSString * _name ;
int _age;
}
//人开车回家
- (void)goHome:(Car *)car;
@end
#pragma mark 人类的实现
@implementation Person
- (void)goHome:(Car *)car{
//车启动了
[car run];
}
@end
9、匿名类访问变量
发现虽然我们给_color进行赋值了,但是打印出来以后还是0,
原因如下:
10、匿名类调用方法
11、匿名类作为方法的参数
1)匿名类作为方法的参数
2)匿名类优缺点
优点:可以简化代码,方便方法调用
缺点:匿名对象实例化以后,只能正确的使用成员变量一次
常见用法:
//下面两句的作用是等价的
Person *p = [[Person alloc] init];
Person *p1 = [Person new];
两者的区别:
alloc 和 init 分别把分配内存和初始化的工作分开。这样更加的灵活,可以自行初始化对象的成员变量值
而不像new每次都初始化为0
new是把分配内存和初始化的工作一起完成了,先分配内存,然后调用类的构造函数。
- 黑马程序员——OC—类方法及匿名类
- 黑马程序员——OC学习——类方法和匿名类
- 黑马程序员——OC基础---基础小结(类方法,匿名对象,封装)
- 黑马程序员——OC类方法
- 黑马程序员—OC学习笔记—多个参数方法,匿名类,自定义对象初始化方法
- 黑马程序员—OC基础--扩展(匿名类别)
- 黑马程序员—OC—类方法 && self
- 黑马程序员——OC---类的方法相关
- 黑马程序员——OC基础语法----类、对象、方法
- 黑马程序员——OC基础---类方法的总结
- 黑马程序员——oc中的方法
- 黑马程序员——OC中的类
- 黑马程序员——OC中的类
- 黑马程序员——oc类实例
- 黑马程序员——OC中的类
- 黑马程序员--OC自学笔记---03类方法、匿名类、封装、关系、重载、static
- 黑马程序员----匿名类及匿名内部类的学习
- 黑马程序员——OC中的类方法和对象方法
- linux系统工程师面试题(附答案)
- IOS控件
- Linux网络驱动程序
- 分享一个很屌的eazyui二开demo
- 控制台下创建窗口和WinMain入口创建窗口简单程序
- 黑马程序员——OC—类方法及匿名类
- 黑马程序员————第二十天
- Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析
- Android中实现带有头部的GridView(HeaderGridView)
- Android卸载程序之后跳转到指定的反馈页面
- c之字符串分配
- ZOJ - 3494 BCD Code(AC自动机+数位DP)
- 解决网页右侧空白的方法
- 黑马-C语言-流程控制,循环结构