黑马程序员--IOS学习日记:06--OC的核心语法
来源:互联网 发布:照片动态制作软件 编辑:程序博客网 时间:2024/05/17 04:29
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、点语法
1.点语法的本质是方法调用
如 p.age = 10; 编译器会自动生成 [p setAge: 10];
注: 1.点语法是用来调用set和get方法的
2.点语法的本质是方法调用
3.编译器会自动分析,将点语法转换成与之对应的set和get方法
二、id类型
1.id类型是通用指针类型,即万能指针,但不能在其前加上*
2.id能指向OC中的任何对象,所以返回id类型值的方法只是返回指向内存中某对象的指针
三、成员变量的作用域
1.@private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)
2.@protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected)
3.@package : 只要处在同一个框架中,就能直接访问对象的成员变量
4.@interface和@implementation中不能声明同名的成员变量ormSelector:@selector(test)];
四、@property和synthesize
1. @property用在@interface中,会自动生成某个成员变量的set 和get方法的声明和实现
2.@synthesize用在@implementation中,会自动生成某个成员变量的set和get方法的实现例如
@interface Person : NSObject { int _age; // int age; int _height; double _weight; NSString *_name; } // @property:可以自动生成某个成员变量的setter和getter声明 @property int age; //- (void)setAge:(int)age; //- (int)age; @property int height; //- (void)setHeight:(int)height; //- (int)height; - (void)test; @property double weight; @property NSString *name; @end @implementation Person // @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量 @synthesize age = _age; @synthesize height = _height; @synthesize weight = _weight, name = _name; @end
3. 1>写了@property,若自己定义了set方法,编译器只会生成get方法和成员变量
2>写了@property,若自己定义了get方法,编译器只会生成set方法和成员变量
3>写了@property,若自己定义了set和get方法,编译器就不会生成不存在的成员变量
四、构造方法
1. Person *p=[Person new]; //完整的创建一个可用的对象
1>分配存储空间(+alloc方法)
2>初始化 (- init方法)
new方法做的事情
1>调用+alloc方法,分配存储空间 Person *p1=[Person alloc];
2>调用- init 方法,进行初始化(初始化完毕,默认为0)Person *p2=[p1 init];
Person *p=[Person new]; 就相当于Person *p3=[ [ Person alloc ] init ];
2. init 就是构造方法
3. 任何对象构造之前首先要调用父类的构造方法(init)
4. 若想某个对象一创建出来,它的成员变量就是某个值(10),就重写构造方法(重写init)
-(id)init { if(self=[super init]) //先调回super的init方法,如果对象初始化成功 { _age=10 //赋值 } return self; //返回初始化完毕的对象 }
5. 重写构造方法的步骤:(1)调用父类的构造方法,初始化父类([super init])
(2)在进行子类内部成员变量的初始化
6. 自定义构造方法
规范:1>一定是对象方法,以 - 开头
2>返回值一般都是id类型
3>方法名一般以initwith开头
-(id)initwithName:(NSString*)name { if(self=[super init]) //先调回super的init方法,如果对象初始化成功 { _name=name; //赋值 } return self; //返回初始化完毕的对象 }
五、.h文件和.m文件的分工
1.#import指令用于引入.h头文件
2. .h文件用于类的声明,.m文件用于类的实现
3.如果一个类中用到其他类,只需要引入其他类的声明即可
六、Category(分类:给类扩充一些方法)
1. 格式
分类的声明:@interface 类名
@end
分类的实现:@implementation 类名
@end
2. 作用:不改变原来类的内容的基础上为类增加一些新的方法
3. 注意点:
1>分类只能增加方法,不能增加成员变量
2>分类的实现里面可以增加成员变量
3>分类可是重新实现原来类中的方法,但是会覆盖原来的方法,导致原来的方法不可再用
4>分类方法优先去分类中找,然后再去原来的类中找,最后再去父类中找(优先级:分类->原来类->父类)
六、description方法
1. 默认情况下,利用NSLog和%@输出对象时,结果是<类名:对象地址>
2. 利用NSLog和%@输出对象时,会调用对象的-description方法,description方法的返回值是(NSString*)
3. 若想将对象的属性值(age=10,name="jack")打印出来,可以重写description方法
-(NSString *)description
{
return [ NSString stringwithFormat : @"age is %d , name=%@" , _age , _name ];
}
注意点:不能在-description方法中使用NSLog打印self(死循环)
七、SEL
SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法。其实消息就是SEL。
- 黑马程序员--IOS学习日记:06--OC的核心语法
- 黑马程序员:OC学习日记之核心语法一
- 黑马程序员:OC学习日记之核心语法二
- 黑马程序员-iOS学习日记(一)OC基本语法
- 黑马程序员- IOS学习笔记OC核心语法
- 黑马程序员--IOS入学学习--8-OC核心语法
- 黑马程序员-10.OC的核心语法
- 黑马程序员-OC的核心语法
- 黑马程序员-OC的核心语法补充
- 黑马程序员----OC核心语法
- 黑马程序员-----------ios培训 oc核心语法一
- 黑马程序员--------iOS培训 OC核心语法二
- 黑马程序员-iOS学习日记(六)面向对象-核心语法(一)
- 黑马程序员-iOS学习日记(七)面向对象-核心语法(二)
- 黑马程序员-OC学习日记三之点语法小结
- 黑马程序员——OC学习笔记04 核心语法
- 黑马程序员--IOS学习日记:01--OC概述
- 黑马程序员--IOS学习日记:02--OC类和对象
- HDU ACM 1176 免费馅饼
- [转]我的数据挖掘之路——从菜鸟到实战
- 第八周项目2 TIME类中的运算重载符
- bat命令实现动态修改
- Hinton关于RBM的代码注解之(一)rbm.m
- 黑马程序员--IOS学习日记:06--OC的核心语法
- java进行n阶曲线拟合
- performSelector may cause a leak because its selector is unknown
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- Hinton关于RBM的代码注解之(二)backpropclassify.m
- 解决Unity中,使用Ngui 的默认字体Arial,在部分Android设备显示中文不清楚,或者显示不出来问题
- 【流媒體】jrtplib—VS2010下RTP开源协议库JRTPLIB3.9.1编译
- 如何给虚拟机上的CentOS添加一块硬盘呢?
- JAVA分代垃圾回收机制