objective-C学习笔记(四)函数成员:方法(函数)
2016-03-23 17:51
190 查看
函数分为:
全局函数(C语言函数)
成员函数(OBJC方法):实例方法 “-” 和类方法“+”的区别
//这里要区别静态变量(类变量)、全局函数、常量的区别
OBJC里面,所有方法默认为公有方法。没有private或protected方法
实例方法:
可以访问:(self)实例方法、实例变量、实例属性
可以访问:类方法、静态变量
类方法:
可以访问:类方法、静态变量
不能访问:(self)实例方法、实例变量、实例属性,只能new一个对象才能访问
self指针:
编译器在编译实例方法的时候,自动new了一个本类的对象:self
类方法在编译的时候, 也会new一个self,可是,这个时候的self是类,而不是对象。
方法参数:
如果参数为值类型,则为传值方式;
如果参数类型为引用类型,则为传指针方式。
-(void)changeX : (int)x {} //单个参数的话,方法名既为外部参数名,调用的时候传值用;
//后面的参数是内部参数,函数内部计算用。
-(void)changeX:(int)x toY:(int)y{} //两个以上的参数的话,就需要单独命名外部参数(toY)。
-(void)changeX:(int)x toZ:(int)y{}//这个上面的方法就是不同的两个方法。
动态方法调用机制:消息分发表
id obj = [[BLNPoint alloc] init];
obj 不管是什么类型的对象(即内存没有分配一个栈,只是分配了一个堆),然后再在这个堆的消息分发表里找到所有的方法,可以直接使用。
和全局方法的区别:
全局方法在编译的时候,开辟的内存首地址就已经确定了,所以性能上非常快。
而动态方法调用是要在运行时,去查找这个obj的methodlists里查找对应的方法。会有一定的性能损耗。
全局函数(C语言函数)
成员函数(OBJC方法):实例方法 “-” 和类方法“+”的区别
//这里要区别静态变量(类变量)、全局函数、常量的区别
OBJC里面,所有方法默认为公有方法。没有private或protected方法
实例方法:
可以访问:(self)实例方法、实例变量、实例属性
可以访问:类方法、静态变量
类方法:
可以访问:类方法、静态变量
不能访问:(self)实例方法、实例变量、实例属性,只能new一个对象才能访问
self指针:
编译器在编译实例方法的时候,自动new了一个本类的对象:self
类方法在编译的时候, 也会new一个self,可是,这个时候的self是类,而不是对象。
方法参数:
如果参数为值类型,则为传值方式;
如果参数类型为引用类型,则为传指针方式。
-(void)changeX : (int)x {} //单个参数的话,方法名既为外部参数名,调用的时候传值用;
//后面的参数是内部参数,函数内部计算用。
-(void)changeX:(int)x toY:(int)y{} //两个以上的参数的话,就需要单独命名外部参数(toY)。
-(void)changeX:(int)x toZ:(int)y{}//这个上面的方法就是不同的两个方法。
动态方法调用机制:消息分发表
id obj = [[BLNPoint alloc] init];
obj 不管是什么类型的对象(即内存没有分配一个栈,只是分配了一个堆),然后再在这个堆的消息分发表里找到所有的方法,可以直接使用。
和全局方法的区别:
全局方法在编译的时候,开辟的内存首地址就已经确定了,所以性能上非常快。
而动态方法调用是要在运行时,去查找这个obj的methodlists里查找对应的方法。会有一定的性能损耗。
相关文章推荐
- 详解Objective-C编程中对设计模式中适的配器模式的使用
- 调试SPRING MVC(或者整合SSH)的时候遇到了org/objectweb/asm/Type
- 详解Objective-C设计模式编程中对备忘录模式的运用
- Objective-c编程-Blocks概要
- How to Detect and Track Object With OpenCV
- java object解析
- 《JS高程》JS-Object对象整理
- iOS 图片 的 聊天气泡显示 Objective-C
- Swift/Objective-C-Swift与Objective-C混用教程
- Objective-C和Swift混编的一些经验
- <Troubleshooting> libmawt.so: libXext.so.6: cannot open shared object file: No such file or director
- 011_用eclipse打开hadoop1.2.1源码出现The method getSplits(JobConf, int) is undefined for the type Object错误
- JDK源码(一)Object类
- 01 - Pushing a navigation controller is not supported
- objective-C学习笔记(三)数据成员:属性与实例变量
- ORA-38301: cannot perform DDL/DML over objects in Recycle Bin分析
- alembicTool_lsObject
- 利用ObjectAnimator实现侧滑菜单的效果
- Objective-C @encode关键字
- JSONObject put,accumulate,element的区别