【黑马程序员】————OC特有语法

一、点语法

点语法的本质还是方法调用

p.age = 10; // [p setAge:10];

int a = p.age; // [p age];

二、成员变量的作用域

 @public : 在任何地方都能直接访问对象的成员变量
 @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)
 @protected : 可以在当前类及其子类的对象方法中直接访问  (@interface中默认就是@protected)
 @package : 只要处在同一个框架中,就能直接访问对象的成员变量
 @interface和@implementation中不能声明同名的成员变量

三、@property和@synthesize

@property:可以自动生成某个成员变量的setter和getter声明

@property int age;

//- (void)setAge:(int)age;
//- (int)age;

@synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量

@synthesize age = _age;

  默认会访问age这个成员变量,如果没有age,就会自动生成@private类型的age变量

四、id

    id == NSObject *
    万能指针,能指向\操作任何OC对象

五、构造方法

1.构造方法:

用来初始化对象的方法,是个对象方法,-开头

2.重写构造方法的目的:

为了让对象创建出来,成员变量就会有一些固定的值

3.重写构造方法的注意点 

 1>先调用父类的构造方法([super init])  

2>再进行子类内部成员变量的初始化

4.自定义构造方法

自定义构造方法的规范
  1>一定是对象方法,一定以 - 开头
  2>返回值一般是id类型
  3>方法名一般以initWith开头

六、分类-Category

1.          基本用途

  • 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式

l   继承

l   分类(Category)

2.          格式

  • 分类的声明
@interface 类名 (分类名称)

// 方法声明

@end
  • 分类的实现
@implementation 类名 (分类名称)

// 方法实现

@end

3.          好处

  一个庞大的类可以分模块开发

  一个庞大的类可以由多个人来编写,更有利于团队合作

4.          给系统自带的类添加分类

  给NSString增加一个类方法:计算某个字符串中阿拉伯数字的个数

  给NSString增加一个对象方法:计算当前字符串中阿拉伯数字的个数

5.          注意

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

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

  3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用

  4.方法调用的优先级:分类(最后参与编译的分类优先) > 父类

七、类的本质

      (类库:很多类的集合)

1.          类也是个对象

  • 其实类也是一个对象,是Class类型的对象,简称“类对象”
  • Class类型的定义
typedef struct objc_class *Class;
  • 类名就代表着类对象,每个类只有一个类对象

2.          +load和+initialize

  • +load

l   在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法

l   先加载父类,再加载子类;也就是先调用父类的+load,再调用子类的+load

l   先加载元原始类,再加载分类

l   不管程序运行过程有没有用到这个类,都会调用+load加载

  • +initialize

l   在第一次使用某个类时(比如创建对象等),就会调用一次+initialize方法

l   一个类只会调用一次+initialize方法,先调用父类的,再调用子类的

3.          获取类对象的2种方式

Class c = [Person class]; // 类方法

或者

Person *p = [Person new];
Class c2 = [p class]; // 对象方法

4.          类对象调用类方法

Class c = [Person class];
Person *p2 = [c new];

八、description方法

1.      -description方法

使用NSLog和%@输出某个对象时,会调用对象的-description方法,并拿到返回值进行输出

2.      + description方法

使用NSLog和%@输出某个类对象时,会调用类对象+description方法,并拿到返回值进行输出

3.      修改NSLog的默认输出

l   重写-description或者+description方法即可

4.      死循环陷阱

l   如果在-description方法中使用NSLog打印self

九、SEL

1.          方法的存储位置

  • 每个类的方法列表都存储在类对象中
  • 每个方法都有一个与之对应的SEL类型的对象
  • 根据一个SEL对象就可以找到方法的地址,进而调用方法
  • SEL类型的定义

typedef struct objc_selector       *SEL;

2.          SEL对象的创建

SEL s = @selector(test);
SEL s2 = NSSelectorFromString(@"test");

3.          SEL对象的其他用法

// 将SEL对象转为NSString对象
NSString *str = NSStringFromSelector(@selector(test));

Person *p = [Person new];
// 调用对象p的test方法
[p performSelector:@selector(test)];

十、NSLog输出增强

  默认情况下,利用NSLog和%@输出对象时,结果是:<类名:内存地址>

  • __FILE__ :源代码文件名
  • __LINE__ :NSLog代码在第几行
  • _cmd :代表着当前方法的SEL
// 下面的代码会引发死循环
- (void)test {
    [self performSelector:_cmd];
}

【黑马程序员】————OC特有语法,布布扣,bubuko.com

时间: 2024-10-19 22:51:38

【黑马程序员】————OC特有语法的相关文章

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方

黑马程序员—OC点语法和成员变量作用域

一.点语法 1.OC中点语法是方便从事别的语言开发的程序员迅速的转到OC开发当中,先看下面这个例子: 1 // 声明一个Person类 2 @interface Person : NSObject 3 { 4 int _age; 5 NSString *_name; 6 } 7 - (void)setAge:(int)age; 8 - (int)age; 9 @end 10 11 // 实现Person类 12 @implementation Person 13 - (void)setAge:(

黑马程序员— OC基本语法、类和对象、三大特性

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 第一讲     OC简介及基本语法 Objective-C简称OC是在C语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,也就是可以在OC代码中混入C语言代码,甚至是C++代码.可以使用OC开发Mac OS X平台和IOS平台的应用程序.简单的介绍了一下OC,下面我们来看看OC的基本语法,学习OC之前我们先学习了C语言,因为OC是在C语言的基础上的一门开发语言,因此OC的很多基本语法

黑马程序员— OC核心语法之构造方法、Category分类、类的本质、description和SEL

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 上一章我们学习了OC的一些核心语法,初步了解了OC作为一门开发语言的一些较为深层次的知识.本章我们继续学习OC的核心语法,主要包括OC的构造方法,Category分类,类的本质及深入研究,以及description关键字和SEL关键字. 第一讲     构造方法 1. 构造方法 构造方法是用来初始化对象的方法,是一个对象方法,以减号"-"开头,构造方法其实就是init方法,初始化完毕

黑马程序员-OC基本语法

OC是C系列语言,是面向对象的语言,而C语言是面向过程的,那么首先要理解面向对象和面向过程的区别. 面向过程是专注“事件”本身,这件事从发生到结束的行为.例如怎么把大象装进冰箱,面向过程的思想是这样的,首先打开冰箱门,把大象装进去,然后把冰箱门关上.而面向对象是专注于“事物”本身的,同样是装大象,面向对象的思想是这样的,什么东西能装大象去,找到能装大象的冰箱嘛~~~~ 面向对象有2个非常重要的概念,类和对象.首先要有类,就是对象的模板,然后用类来创建对象,OC中的语法是这样的: 1 #impor

黑马程序员————OC中点语法、id类型和构造方法

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- id:万能指针(内部已经包含*),能指向任何OC对象,只能使用于OC对象   id == NSObject * 构造方法:用来初始化对象的方法,是个对象方法,而且减号开头   init 完整地创建一个可用的对象 1.分配存储空间    +

【黑马程序员】————面向对象语法2

一.      set方法和get方法 1.          set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检.水龙头过滤,过滤掉不合理的东西),比如僵尸的生命值不能为负数 成员变量尽量不要用@public 2.          set方法 1)       作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤 2)       命名规范: 1> 方法名必须以set开头 2> set后面

【黑马程序员】————面向对象语法1

一.  面向对象和面向过程思想 OC是面向对象的,C是面向过程的.面向对象和面向过程只是解决问题的两种不同思想 常用术语 面向过程 Procedure Oriented 面向对象 Object Oriented,简称OO 面向对象编程 Object Oriented Programming,简称OOP 二.  类和对象的关系 面向对象中有2个非常重要的概念:类和对象 OC中的面相对象 1)      OC中的类相当于图纸,用来描述一类事物.也就是说,要想创建对象,必须先有类 2)      OC

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性

黑马程序员-OC内存管理 @property的增强

涉及到内存管理,只读,多线程等很多功能时,setter和getter方法也就没那么简单了:当然@property依然强大,很好用: 1:内存管理相关参数: *:retain:  (如果是oc对象类型),生成的setter会自动release旧值,retain新值: *:assign:(适用于非oc对象)  这个是默认的值 *:copy:release旧值,copy新值: @property (retain) NSString *name; // 同类型的参数不能同时写 // @property