02 OC面向对象基础
2017-04-14 17:24
169 查看
本篇是OC中关于类的一些最基础的细碎语法点
.m –> 类实现文件,实现方法。
同理:< >表示系统库, “”表示引用自身头文件
import < Foundation/Foundation.h >
import “myHeader.h”
方法:
(1)归属:+代表类方法 -代表实例方法
(2)参数:有几个冒号就有几个参数
(3)调用:使用[ ] 进行方法调用
@public
@protected—–>默认
@private
// 注意:点语法不是直接访问成员变量,为防止模糊,将成员变量在定义时前面加上下划线_,完整规范版get set方法写法
xcode4.5以下:
xcode 4.5以上:
NSObject中:
1. 类文件及引用
类文件
.h –> 类声明文件,声明变量和方法,所有在.h中声明的方法都是公共方法。.m –> 类实现文件,实现方法。
//头文件.h中 @interface Teacher: NSObject // 基类不可以省略 { int age; NSString * name; } -(NSString*) name; -(void) setName: (NSString *) newName; @end //实现文件.m中 #import "Teacher.h" @implement Teacher -(NSString *) name{ return name; } -(void) setName: (NSString * )newName{ name = newName; //此处是浅拷贝,根据情况自己去深拷贝 } @end
使用import
解决include递归包含问题,相当于加了预处理判定指令的#include同理:< >表示系统库, “”表示引用自身头文件
import < Foundation/Foundation.h >
import “myHeader.h”
2. 变量及方法语法简述
成员变量写在{}中方法:
(1)归属:+代表类方法 -代表实例方法
(2)参数:有几个冒号就有几个参数
(3)调用:使用[ ] 进行方法调用
3. 成员变量作用域、访问方式
成员变量作用域
三种作用域:(因为没有包的概念,所有没有package的作用域)@public
@protected—–>默认
@private
成员变量封装方法访问(getter/ setter)
基本写法:@interface Teacher: NSObject { @private int age; } -(int) age; // getter方法的命名,不要写成getAge -(void) setAge: (int)newAge; @end @implement Teacher -(int) age{ return age; } -(void) setAge: (int)newAge{ age = newAge; } @end
点语法访问
点语法编译器会将其翻译成get set 方法(不像Java中的点语法是直接访问变量),因此,如果不存在get set会报错int main(int argc, const char * argv[]) { @autoreleasepool { Teacher * teacher = [[Teacher alloc] init]; //访问 age [teacher age]; int age = teacher.age; //set age [teacher setAge:8]; teacher.age = 8; } return 0; }
// 注意:点语法不是直接访问成员变量,为防止模糊,将成员变量在定义时前面加上下划线_,完整规范版get set方法写法
@interface Teacher: NSObject
{
@private int _age;
}
-(int) age; // getter方法的命名,不要写成getAge
-(void) setAge: (int)age;
@end
@implement Teacher
-(int) age{
return _age;
}
-(void) setAge: (int)age{
_age = age;
}
@end
int main(int argc, const char * argv[]) { @autoreleasepool { Teacher * teacher = [[Teacher alloc] init]; //访问 age [teacher age]; int age = teacher.age; //set age [teacher setAge:8]; teacher.age = 8; } return 0; }
编译器升级: @property @synthesize
由于每个属性都写两个get 和 set方法,而且内容大致一样,重复冗余过多,编译器提供了两个关键字解决该问题 @property 以及 @synthesizexcode4.5以下:
.h中: @property int age; // @property会自动展开age属性get set的声明 .m中: @synthesize age; //@synthesize会自动展开该property的实现 @synthesize age = _age; //注意:*** 展开时寻找属性的顺序: // 先找显性赋值的属性(_age),如果该属性不存在,自动生成一个。 // 若未有显性赋值,则寻找同名属性(age),如果该属性不存在,自动生成一个。
xcode 4.5以上:
//不需要写@synthesize了,仅写@property即可 //***直接访问或者生成_age变量
4. 方法
构造方法
构造方法是动态方法:-(id)initWithAge:(int)age{ self = [super init]; //先调用super的init if(self){//判断是否为空 _age = age; } return self; }
int main(int argc, const char * argv[]) { @autoreleasepool { //alloc方法是类方法,负责开辟内存空间(程序要做的) //init方法是实例方法,负责初始化类的成员变量(我们要做的工作) Teacher * teacher = [[Teacher alloc] initWithAge:8]; NSLog(@"Teacher's age is %i", teacher.age); // 等价写法 new关键字的使用 [[Teacher alloc]init] == [Teacher new] } return 0; }
对象描述方法
OC中类似于java中的toString方法,打印对象信息的函数:NSObject中:
+(NSString*) description; //子类可以重写该方法
self指代
self 在静态方法中指代“类”,在动态方法中指代“对象”//谁调用方法,就是指代谁 self.age [self alloc]
相关文章推荐
- [零基础学JAVA]Java SE面向对象部分.面向对象基础(02)
- 黑马程序员-IOS-OC基础-面向对象语法二
- 【OC语言基础】之面向对象开发(类和对象)
- [黑马IOS自学第十篇]OC语言基础,面向对象概念,类学习
- 黑马程序员------OC 面向对象和面向过程思想(基础)
- 黑马程序员-IOS-OC基础-面向对象语法一
- 黑马程序员——零基础学习iOS开发——10 Object-C 面向对象思想、OC语法简介、对象、类、
- 黑马程序员-OC语言基础:面向对象语法 四
- OC基础语法学习2:面向对象中的特点
- [黑马IOS自学第九篇]OC语言基础,面向对象概念,类的创建,OC多文件开发等
- 黑马程序员——02 面向对象基础
- [零基础学JAVA]Java SE面向对象部分-14.面向对象高级(02) 推荐
- 黑马程序员——Objective-C基础——面向对象语法02
- OC基础语法<1.1> 入门面向对象语法-OC类、点语法
- 黑马程序员-OC语言基础:面向对象语法 二
- OC基础—面向对象思想(思想很重要)
- 黑马程序员_OC面向对象之类和对象基础
- 黑马程序员——OC基础---面向对象语法
- 面向对象基础进阶02
- ios学习笔记-(oc基础-面向对象小系统)