OC基础之----------语法介绍。

1.点语法的介绍

本质:方法调用

          Person *p = [[Person alloc]init];
        //这里调用的事set语法 [p setName:@"林芳"];
       p.name = @"林芳";
        //这里调用的事get语法 [p name];
        NSString *name = p.name;
        //**注意点:在 = 号前是set ,=号后是get


2.成员变量作用域

@public : 任何地方都能直接访问成员变量
    @private : 只能在当前类的对象方法中直接访问
@protected : 可以在当前类及子类的对象方法中直接访问 (默认)
    @package : 只要在一个框架,都可以访问


3.@property 和 @synthesize

1>@property 自动生成set 和get方法的声明 / 实现   int a;

2 > @synthesize 自动生成set 和get方法的实现  并且会访问_name这个成员变量 a = _a;

注意点:成员变量才写_name  ,使用@property时不需要写

             若手动生成 set get 方法,@property就不会帮你生成成员变量


@property的参数

 1. strong:成员变量是强指针 (适用于oc对象类型)

 2.weak : 成员变量是弱指针 (适用于oc对象类型)

3. assign : 适用于非oc对象 (一般用在变量身上)

4. id

id : 万能指针,指谁都可以;

id = NSObject *

id作为参数时可以传入任何对象

id后面不要加*


5.构造方法

1.》对象成员变量默认初始化都是0

2》重写系统构造方法都需要先调用父类的方法

//调用父类的init方法,初始化父类中声明的一些成员变量和其他属性

- (instancetype)init
{
    if (self = [super init]) {
        
    }
    return self;
}

//构造方法使用场合 : 初始化对象,为了让对象创建出来就有一些固定的值

                            注意点:先调用父类的构造方法,在进行子类内部成员变量的初始化

3》自定义构造方法注意点:

1》》一定是对象方法 -号开tou

2》》返回值一定是instancetype 类型

3》》方法名一般都是以 init 开头

4》设计原则,成员变量在那个类中,在那个类进行初始化


6.Category  分类

作用:可以给某一个类扩充一些方法(不修改原来类的代码)

使用注意:

1》只能增加方法,不能增加成员变量

2》方法中可以访问原来类的成员变量

3》可以重新实现原类中的方法,但是会覆盖掉原来的方法,(优先级高)

4》方法调用优先级 分类-》原来的类-》父类


7.类的本质

1》类的本质是一个类对象   class

2》获取一个类对象   可以使用类创建的对象  也可以使用类获取

 Class p3 = [p class];
    Class p4 = [p1 class];
  Class p5 = [Person class];

//p3,p4,p5现在就是person这个类,可以直接调用person的类方法

3》程序刚启动的时候,会一次性加载项目中所有的类,类加载完毕后会调用类和分类的+load方法;先加载父类,再加载子类,

+(void)load; 

4》第一次使用这个类的时候,会调用+(void)initialize; 只会调用一次
+(void)initialize;


8.NSLog的本质

1》默认情况下,nslog和%@输出对象时,结果是:<类名 + 内存地址>

     1》会调用对象的- (NSString*)description; 方法

2 》拿到- (NSString*)description;的返回值显示在屏幕上

3》- (NSString*)description;的返回值是 类名 + 内存地址 ,可以在类中重写这个方法,返回自己想要的打印结果。


//打印所在行数
        NSLog(@"%d",__LINE__);


9.SEL

SEL : 指向类的方法地址 ;在程序运行时,会将每个方法包装成一个sel对象,person的对象调用方法时,isa根据相应的sel对象来寻找对应的方法。

          是一种对方法的包装,将方法包装成sel类型的数据,去找对应的方法地址,找到方法地址调用此方法。

SEL的定义 :

    //根据sel 调用类的对象方法;
        
        //  间接调用 test方法
        [p performSelector:@selector(test)];
        // 可以带有参数
        [p performSelector:@selector(test:) withObject:@"zhangsan"];

2.》创建一个sel对象  以及其他使用方法

        SEL s = @selector(test);
        [p performSelector:s];

 》. 字符串转为sel方法

       NSString *name = @"test";
        SEL s = NSSelectorFromString(name);
        [p performSelector:s];

  》将方法转为字符串  _cmd等于自身这个方法

NSString *name =   NSStringFromSelector(_cmd);
    
    NSLog(@"name");

       



  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值