黑马程序员技术交流社区
标题: OC学习笔记之self关键字 [打印本页]
作者: chunhuayun 时间: 2015-10-4 18:55
标题: OC学习笔记之self关键字
1、self和super
这两个OC中的保留字,用于在方法定义中引用执行该方法的对象。OC中的self就相当于C++和Java中的this指针。
Super发送消息可以将方法实现分发给其父类。
2、self的应用场景
1)用在类方法中
2)用在对象方法中
3)访问成员变量
4)self在OC的内存管理特殊使用
3、self在对象方法中的使用
self指代调用当前方法的那个对象
例如:
- #import <Foundation/Foundation.h>
-
- #pragma mark Dog类声明定义部分
- @interface Dog: NSObject
- //跑完后吃东西
- -(void)run;
- //吃东西
- -(void)eat;
- @end
-
- @implementation Dog
-
- -(void)run{
- NSLog(@"The dog is run...");
- //显示self的地址
- NSLog(@"self = %p",self);
- //self在对象方法中可以调用其他对象方法
- [self eat];
- }
-
- -(void)eat{
- NSLog(@"The dog eat food...");
- }
-
- @end
- int main(int argc, const char * argv[])
- {
-
- @autoreleasepool {
-
- Dog *dog = [Dog new];
- //打印实例变量dog的地址
- NSLog(@"dog = %p", dog);
-
- [dog run];
- }
- return 0;
- }
复制代码打印结果:
2015-10-04 18:53:43.846 StaticDemo[1532:303] dog =0x100108ea0
2015-10-04 18:53:43.848 StaticDemo[1532:303] The dogis run...
2015-10-04 18:53:43.848 StaticDemo[1532:303] self =0x100108ea0
2015-10-04 18:53:43.848 StaticDemo[1532:303] The dogeat food...
分析结果:
由结果可知,self的地址跟dog的地址是相同的
4、self在类方法中的使用
self指代的是当前的类。此时self只能调用【类方法】
- #import <Foundation/Foundation.h>
-
- #pragma mark Dog类声明定义部分
- @interface Dog: NSObject
- //跑完后吃东西
- +(void)run;
- //吃东西
- +(void)eat;
- @end
-
- @implementation Dog
-
- +(void)run{
- NSLog(@"The dog is run...");
- //显示self的地址
- NSLog(@"self = %p",self);
- //self在对象方法中可以调用其他对象方法
- [self eat];
- }
-
- +(void)eat{
- NSLog(@"The dog eat food...");
- }
-
- @end
- int main(int argc, const char * argv[])
- {
-
- @autoreleasepool {
-
- Dog *dog = [Dog new];
- //打印实例变量dog的地址
- NSLog(@"dog = %p", dog);
- //打印Dog类的地址
- NSLog(@"Dog = %p", [dog class]);
- [Dog run];
- }
- return 0;
- }
-
复制代码
打印结果:
2015-10-04 18:51:20.647 StaticDemo[1505:303] dog =0x100108ee0
2015-10-04 18:51:20.649 StaticDemo[1505:303] Dog =0x100001200
2015-10-04 18:51:20.650 StaticDemo[1505:303] The dogis run...
2015-10-04 18:51:20.651 StaticDemo[1505:303] self =0x100001200
2015-10-04 18:51:20.651 StaticDemo[1505:303] The dogeat food...
分析结果:
由上述结果可知在类方法中使用的self的地址与调用方法的类的地址是相同的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |