【黑马程序员】---Objective-C核心语法总结
2015-03-12 19:02
267 查看
------- android培训、java培训、期待与您交流! ----------
Objective-C核心语法总结
点语法本质上还是方法的调用,并不是访问对象的成员变量
(2)@private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)
(3)@protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected)
(4)@package : 只要处在同一个框架中,就能直接访问对象的成员变量
(1)成员变量不仅可以在累的定义中声明,也可以在类的实现中声明。
(2) @interface和@implementation中不能声明同名的成员变量。
(2)@synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量
property和synthesize的几种形式,见如下代码
(1)@synthesize会访问对象的成员变量,如果不存在,就会自动生成@private类型的变量。
(2)如果类没有声明和实现getter或者setter,其中的一个,则@property会生成另一个,并且生成对应的变量
(3)如果类既声明和实现了gertter和setter,那么就不会自动生成对应的@private类型变量
(4)还有另外一种特殊的形式:@synthesize age;默认会访问age这个成员变量,如果没有age,就会自动生成@private类型的age变量
(1)完整地创建一个对象有两步,第一,分配存储空间(+alloc);第二,初始化(init)
(2)一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性
自定义构造方法:
(1)自定义构造方法一定是以- 开头,函数名以initWith开头
(2)只是在init方法上加了参数列表,更灵活的初始化对象。
格式:
分类的声明
@interface 类名 (分类名称)
// 方法声明
@end
分类的实现
@implementation 类名 (分类名称)
// 方法实现
@end
(1)Category可以访问原始类的实例变量,但不能添加变量,只能添加方法。如果想添加变量,可以考虑通过继承创建子类
(2)Category可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法
(3)多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效
+load和+initilize
+load
(1) 在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法
(2)先加载父类,再加载子类;也就是先调用父类的+load,再调用子类的+load
(3)先加载元原始类,再加载分类
(4)不管程序运行过程有没有用到这个类,都会调用+load加载
+initialize
(1)在第一次使用某个类时(比如创建对象等),就会调用一次+initialize方法
(2)一个类只会调用一次+initialize方法,先调用父类的,再调用子类的
获取类对象的方式:
Class c2 = [p class]; // 对象方法
心得体会:
(1)类名就代表着类对象,每个类只有一个类对象。
(2)先通过Class创建类对象,再通过类对象创建类型对象。
+description方法:使用NSLog和%@输出某个类对象时,会调用类对象+description方法,并拿到返回值进行输出
心得体会:
(1)通过重写-description和+description方法,来修改NSLog的输出。
(2)如果在-description方法中使用NSLog打印self会
9e73
造成死循环。
(1)其实给对象发送消息,这个消息就是SEL,把方法封装成SEL数据,然后去找对应的方法低值,最后调用方法。
(2)每个方法都有一个与之对应的SEL类型的对象
Objective-C核心语法总结
1.点语法
点语法是为了方便其它程序员转入ocPerson *p = [Person new]; p.age = 10; // 其实是[p setAge:10]; int a = p.age; // 其实是 [p age]; p.name = @"Jack"; NSString *s = p.name; NSLog(@"%@", s);心得体会:
点语法本质上还是方法的调用,并不是访问对象的成员变量
2.成员变量的作用域
(1)@public : 在任何地方都能直接访问对象的成员变量(2)@private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)
(3)@protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected)
(4)@package : 只要处在同一个框架中,就能直接访问对象的成员变量
int _no; // 默认为protected @public // 在任何地方都能直接访问对象的成员变量 int _age; @private // 只能在当前类的对象方法中直接访问 int _height; @protected // 能在当前类和子类的对象方法中直接访问 int _weight; int _money;心得体会:
(1)成员变量不仅可以在累的定义中声明,也可以在类的实现中声明。
(2) @interface和@implementation中不能声明同名的成员变量。
3.property和synthesize的用法
(1)@property:可以自动生成某个成员变量的setter和getter声明(2)@synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量
property和synthesize的几种形式,见如下代码
@property int age; // 上面一行代码等同于 - (void)setAge:(int)age; - (int)age; @synthesize age = _age; // 上面一行代码等同于 (void)setAge(int age) { _age = age; } (int)age { return _age; }
// 可以写在在一行 @property int speed, wheels; @synthesize speed = _speed, wheels = _wheels;
// 会访问_speed这个成员变量,如果不存在,就会自动生成@private类型的_speed变量 @synthesize speed = _speed;
@property int speed; // ios4.2之后,@property还包含了@synthesize的功能心得体会:
(1)@synthesize会访问对象的成员变量,如果不存在,就会自动生成@private类型的变量。
(2)如果类没有声明和实现getter或者setter,其中的一个,则@property会生成另一个,并且生成对应的变量
(3)如果类既声明和实现了gertter和setter,那么就不会自动生成对应的@private类型变量
(4)还有另外一种特殊的形式:@synthesize age;默认会访问age这个成员变量,如果没有age,就会自动生成@private类型的age变量
4.id
id是万能指针类型,能指向或者操作其它任何oc对象id d = [Person new]; [d setAge:10];
5.构造方法
用来初始化对象的方法,是个对象方法,-开头// 1.调用+alloc分配存储空间 // Person *p1 = [Person alloc]; // 2.调用-init进行初始化 // Person *p2 = [p1 init]; // 等同于 Person *p4 = [[Person alloc] init];对象初始化的两种写法(重写init方法)
- (id)init { // 1.一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性 self = [super init]; // 当前对象 self // 2.如果对象初始化成功,才有必要进行接下来的初始化 if (self != nil) { // 初始化成功 _age = 10; } // 3.返回一个已经初始化完毕的对象 return self; } - (id)init { if ( self = [super init] ) { // 初始化成功 _age = 10; } // 3.返回一个已经初始化完毕的对象 return self; }心得体会:
(1)完整地创建一个对象有两步,第一,分配存储空间(+alloc);第二,初始化(init)
(2)一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性
自定义构造方法:
// 父类的属性交给父类方法去处理,子类方法处理子类自己的属性 - (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no { // 将name、age传递到父类方法中进行初始化 if ( self = [super initWithName:name andAge:age]) { _no = no; } return self; }心得体会:
(1)自定义构造方法一定是以- 开头,函数名以initWith开头
(2)只是在init方法上加了参数列表,更灵活的初始化对象。
6.分类(category)
在不改变类的模型上,给类扩充一些方法,有利于团队合作格式:
分类的声明
@interface 类名 (分类名称)
// 方法声明
@end
分类的实现
@implementation 类名 (分类名称)
// 方法实现
@end
#import "Person+MJ.h" #import "Person.h" @interface Person (MJ) - (void)study; @end @implementation Person (MJ) - (void)study { NSLog(@"学习-----%d", _age); }心得体会:
(1)Category可以访问原始类的实例变量,但不能添加变量,只能添加方法。如果想添加变量,可以考虑通过继承创建子类
(2)Category可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法
(3)多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效
7.类的本质
其实类也是一个对象,是Class类型的对象,简称“类对象”+load和+initilize
+load
(1) 在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法
(2)先加载父类,再加载子类;也就是先调用父类的+load,再调用子类的+load
(3)先加载元原始类,再加载分类
(4)不管程序运行过程有没有用到这个类,都会调用+load加载
+initialize
(1)在第一次使用某个类时(比如创建对象等),就会调用一次+initialize方法
(2)一个类只会调用一次+initialize方法,先调用父类的,再调用子类的
获取类对象的方式:
Class c = [Person class]; // 类方法
Class c2 = [p class]; // 对象方法
心得体会:
(1)类名就代表着类对象,每个类只有一个类对象。
(2)先通过Class创建类对象,再通过类对象创建类型对象。
8.description方法
-description方法:使用NSLog和%@输出某个对象时,会调用对象的-description方法,并拿到返回值进行输出+description方法:使用NSLog和%@输出某个类对象时,会调用类对象+description方法,并拿到返回值进行输出
心得体会:
(1)通过重写-description和+description方法,来修改NSLog的输出。
(2)如果在-description方法中使用NSLog打印self会
9e73
造成死循环。
10. SEL
SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法// SEL对象的创建 SEL s = @selector(test); SEL s2 = NSSelectorFromString(@"test");
// SEL对象的其他用法 // 将SEL对象转为NSString对象 NSString *str = NSStringFromSelector(@selector(test));
Person *p = [Person new]; // 调用对象p的test方法 [p performSelector:@selector(test)];
// 下面的代码会引发死循环 - (void)test { [self performSelector:_cmd]; // _cmd :代表着当前方法的SEL }心得体会:
(1)其实给对象发送消息,这个消息就是SEL,把方法封装成SEL数据,然后去找对应的方法低值,最后调用方法。
(2)每个方法都有一个与之对应的SEL类型的对象
相关文章推荐
- 黑马程序员——Objective-C基础——核心语法-点语法法和成员变量的作用域
- 黑马程序员----objective-C 核心语法
- 黑马程序员——Objective-C基础——核心语法-@property 和@synthesize
- 黑马程序员——Objective-C基础——核心语法-Category分类和类的深入研究
- 黑马程序员——Objective-C之特殊语法总结
- 黑马程序员-iOS基础-Objective-C基础(五)核心语法(下)
- 黑马程序员——Objective-C基础-——核心语法-description和sel
- 黑马程序员——Objective-C语言知识点总结之OC特有语法
- 黑马程序员-iOS基础-Objective-C基础(四)OC开发技巧及核心语法(上)
- 【黑马程序员】Objective-C语言学习笔记之核心语法(四)
- 黑马程序员——Objective-C基础——核心语法-构造方法
- 黑马程序员——Objective-C基础——语法总结
- 黑马程序员 《ios零基础教程》-- ”Mac OS X的介绍”和一些“基础语法” 2014-3-18总结
- 黑马程序员_ios基础总结6_C语言基本语法五
- 黑马程序员_Objective-C中的ARC学习总结
- 黑马程序员—Objective-C基础_基本语法
- 黑马程序员学习log第一篇基础知识:java概述及基础语法总结
- 黑马程序员_学习笔记:2) Java语法基础总结
- 黑马程序员_ios基础总结4_C语言基本语法三
- 黑马程序员_ios基础总结3_C语言基本语法二