self 在OC中的作用(主要是对象方法和类方法中的作用)

   1.在方法的内部,可以定义1个和属性相同的局部变量。

       这个时候,如果在方法中访问这个同名的变量,访问的是局部变量

 

   如果这个时候,我们非要访问这个同名的属性,

 

 self:自己的可以用在对象方法,和方法当中使用,self的本质是个指针

   在对象方法中self指向当前对象

    类方法中self指向当前类

 

 self:用在对象方法中,指向当前对象(谁调用这个方法,谁就是当前对象)

    

  在对象方法中,self指向当前对象,作用是可以使用self显示的访问当前对象的属性。

 self->属性,代表访问当前对象的属性;可使用self来调用当前对象的其他的对象方法

 

 

 

对象方法中使用self的场景:1.如果在方法中存在和属性同名的局部变量;如果想要访问同名的局部变量,直接写就可以;如果想要访问当前对象的同名属性,必                                         须使用self

                    2:在对象方法当中,如果要调用当前对象的其他的对象方法,必须使用self


选用场景:在方法当中,不存在和属性同名的局部变量,如果这个时候,想要访问当前对象的属性,用不用,self效果都是一样的,都是访问当前对象的属性。



具体实例:
Person类中
.h 中

#import <Foundation/Foundation.h>


@interface Person :NSObject

{

    @public

    NSString *_name;

    int _age;

}

-(void)sayHi;

-(void)hehe;

@end


.m中


#import "Person.h"


@implementation Person

-(void)sayHi

{

    NSLog(@"self ===%p",self);

//   在对象方法中,self指向当前对象,作用是可以使用self显示的访问当前对象的属性。

//    self->属性,代表访问当前对象的属性

    NSLog(@"_name==%@",self->_name);

    NSLog(@"_name==%@",_name);



    

//    NSString *_name = @"jack";

//    NSLog(@"_name===%@",_name);

    

    NSLog(@"我的名字叫%@,我的年龄%d",_name,_age);


}


-(void)hehe

{

    NSLog(@"---------");

//    调用当前对象的sayHi方法

    [selfsayHi];

}

@end



main函数中----

#import <Foundation/Foundation.h>

#import "Person.h"

int main(int argc,constchar * argv[]) {

    @autoreleasepool {

        Person *p1 = [Personnew];

        p1->_name =@"小明";

        p1->_age =10;

        [p1 sayHi];

        NSLog(@"p1===%p",p1);

    }

    return0;

}





打印结果 如下----
self 在OC中的作用(主要是对象方法和类方法中的作用)
self的指针和p1指针相同






self 放在类方法中:

 类加载:当类第一次被访问的时候,会将类的代码存储在代码区,代码区中用来存储的空间也有一个地址(前面的OC基础中有关于类加载的说明,    不懂的可以去前面看看)

    在类方法中,self也是一个指针,执行当前这个类再代码中的地址,self相当于这个类

地址是一样的

self 在OC中的作用(主要是对象方法和类方法中的作用)self 在OC中的作用(主要是对象方法和类方法中的作用)self 在OC中的作用(主要是对象方法和类方法中的作用)


把self放到类方法中,来显示调用本类的其他的类方法


+(void)ddd

{

//    [Person sb];

    [self sb];

}


注意事项:

PS

    在对象方法中,self代表当前对象,所以可以通过self访问当前对象的成员

    在对象方法中 不能使用self调用本类的对象方法

    在类方法中self代表当前这个类,所以可以通过self调用当前类的其他的类方法

    在类方法中不能使用self访问对象的成员,不能去直接访问属性和调用对象方法(如果非要调用,那就先建立对象再调用)