黑马程序员-------OC中的一些核心语法

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

一、编译器特性:点语法

点语法是OC为帮助其他语言程序员迅速掌握和适应OC来创造的语法,点语法的本质为set和get方法的调用,例如:

`int main(int argc, const char * argv[]) {
    Person *p = [Person new];
    //点语法:此处点相当于调用set方法,将值set进成员变量
    p.age = 10;
    //点语法:此处相当于调用get方法,将值取出
    int a = p.age;
    return 0;
}`

注意:即使有了点语法,set和get方法必须要有才能正确编译和执行,因为点语法的本质是set和get方法。
二、成员变量的作用域:

1> @public:在任何地方都能直接访问的成员变量;

2> @private:只能在当前类的对象方法中直接访问的成员变量;

3> @protected:能在当前类和其子类的对象方法中直接访问的成员变量;

当什么都不写的时候,默认成员变量是protected。

三、编译器特性:@property和@synthesize:

1> @property:自动生成某个成员变量的set和get方法声明,如:@property int age;自动生成_age变量的set和get方法声明。

2> @synthesize:自动生成某个成员变量的set和get方法实现,如:@synthesize age = _age;自动生成_age变量的set和get方法实现。

注意点:

1> 上述@synthesize语句会访问_age这个成员变量,如果不存在,就会自动生成这个成员变量;

2> Xcode4.4版本以后,@property可以自动生成成员变量的set和get方法声明、成员变量的set和get方法实现并且自动声明带有下划线的成员变量,但是成员变量的作用域为private;

3> @synthesize age = _age语句如果不写=后面的部分,会默认访问age变量而不是_age;

4> 只会在没有set或get方法的时候生成,如果代码中定义了set或者get方法,则只会生成缺少的那个方法,如果两个方法都有了,则什么都不会生成,包括成员变量;

四、id

id是一种变量类型,即id为关键字之一,id是万能指针,可以指向/操作任何OC对象,相当于NSObject *。

五、构造方法

构造方法init是用来初始化对象时调用的方法,是对象方法,重写构造方法的注意点有:

1> 一定要调用父类(super)的init方法,用以初始化在父类中定义的成员变量和其他属性;

重写init方法实例:

//重写init方法,构造方法
- (id)init
{
    if(self = [super init])
    {
        _age = 10;
        _no = 1;
    }

    return self;
}

调用构造方法实例:

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {

    Person *p = [[Person alloc] init];//使用构造方法创建类的对象
    NSLog(@"age = %d,no = %d", p.age, p.no);
    return 0;
}

2> 自定义构造方法,规范有:
①一定是对象方法;

②返回值一般是id类型;

③方法名一般以init开头;

//自定义构造方法
- (id)initWithAge: (int)age andNo: (int)no
{
    if(self = [super init])
    {
        _age = age;
        _no = no;
    }
    return self;
}

六、分类语法,category
分类为OC中特有的语法,可以给某一个类扩充一些方法,并且不改变原来类的代码。使用注意:

1> 分类只能增加方法,不能增加成员变量;

2> 分类中方法实现可以访问原来类中声明的成员变量;

3> 分类可以重新实现原来类中的方法,但是会重新覆盖掉原来的方法,导致原来的方法永远无法访问到,所以不建议这么做;

4> 方法调用的优先级:分类中的方法(最后编译的分类要高于前面编译的分类)–>类中的方法–>父类中的方法;

分类的写法参照下述小例子:

//分类的声明
#import "Person.h"

@interface Person (sdz)

- (void)study;

@end
//分类的实现
#import "Person+sdz.h"

@implementation Person (sdz)

-(void)study
{
    NSLog(@"-----------");
}

@end

七、类的本质
1> 类本身也是一种对象,是Class类型的对象,简称类对象。

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {

    Person *p1 = [[Person alloc] init];
    Person *p2 = [[Person alloc] init];
    Person *p3 = [[Person alloc] init];
    //获取内存中的类对象(第一种方式)
    Class c1 = [p1 class];
    Class c2 = [p2 class];
    Class c3 = [p3 class];
    //获取内存中的类对象(第二种方式)
    Class c4 = [Person class];
    //c1\c2\c3\c4都指向内存中person类对象,地址相同
    NSLog(@"%p, %p, %p, %p", c1 ,c2, c3, c4);

    //拿到类对象后(即c1、c2、c3、c4)可以调用类方法
    [c1 test];

    return 0;
}

2> 当程序启动时,会将程序中所有的类都加载一次,类加载完毕后就会调用一次+ (void)load方法,先加载父类,再加载子类;
3> 当程序第一次使用这个类的时候,就会调用一次+ (void)initialize方法;

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值