黑马程序员--IOS入学学习--8-OC核心语法
2015-05-21 15:55
309 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
本篇文章是学习OC的第三篇博客,主要记录内容是自学视频中OC核心语法部分的内容,主要有:点语法、@property和@synthesize、构造方法等内容的学习记录。
一、编译器特性:点语法
点语法是OC为帮助其他语言程序员迅速掌握和适应OC来创造的语法,点语法的本质为set和get方法的调用,例如:
注意:即使有了点语法,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方法实例:
调用构造方法实例:
①一定是对象方法;
②返回值一般是id类型;
③方法名一般以init开头;
六、分类语法,category
分类为OC中特有的语法,可以给某一个类扩充一些方法,并且不改变原来类的代码。使用注意:
1> 分类只能增加方法,不能增加成员变量;
2> 分类中方法实现可以访问原来类中声明的成员变量;
3> 分类可以重新实现原来类中的方法,但是会重新覆盖掉原来的方法,导致原来的方法永远无法访问到,所以不建议这么做;
4> 方法调用的优先级:分类中的方法(最后编译的分类要高于前面编译的分类)-->类中的方法-->父类中的方法;
分类的写法参照下述小例子:
七、类的本质
1> 类本身也是一种对象,是Class类型的对象,简称类对象。
2> 当程序启动时,会将程序中所有的类都加载一次,类加载完毕后就会调用一次+ (void)load方法,先加载父类,再加载子类;
3> 当程序第一次使用这个类的时候,就会调用一次+ (void)initialize方法;
本篇文章是学习OC的第三篇博客,主要记录内容是自学视频中OC核心语法部分的内容,主要有:点语法、@property和@synthesize、构造方法等内容的学习记录。
一、编译器特性:点语法
点语法是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方法;
相关文章推荐
- 黑马程序员:OC学习日记之核心语法二
- ios开发-OC核心语法的学习-2
- 黑马程序员————IOS学习笔记 第6篇 OC特殊语法(2)
- 黑马程序员-IOS学习笔记-OC基础OC简介及基本语法
- 黑马程序员————IOS学习笔记 第5篇 OC特殊语法 (1)
- 黑马程序员-iOS学习日记(六)面向对象-核心语法(一)
- 黑马程序员--ios基础--oc--面向对象--核心语法
- 黑马程序员--------iOS培训 OC核心语法二
- 黑马程序员-iOS学习日记(一)OC基本语法
- 黑马程序员-----------ios培训 oc核心语法一
- 黑马程序员-iOS基础-Objective-C基础(四)OC开发技巧及核心语法(上)
- 黑马程序员—(iOS开发)OC开发技巧及核心语法---(九)
- 黑马程序员——零基础学习iOS开发——10 Object-C 面向对象思想、OC语法简介、对象、类、
- 黑马程序员--IOS入学学习--9-OC中的内存管理
- 黑马程序员--IOS入学学习--6-OC基础知识
- ios开发-OC核心语法的学习-1
- 黑马程序员之ios学习总结——09 OC语言的点语法、@property和@synthesize
- 黑马程序员-iOS学习日记(七)面向对象-核心语法(二)
- 黑马程序员--IOS学习笔记(OC-点语法)
- 黑马程序员_OC学习之@property、点语法