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的地址与调用方法的类的地址是相同的
|