Objective-C学习笔记_类和对象
2015-08-02 14:44
513 查看
一 Objective-C概述
二 面向对象编程OOP Object Oriented Programming
三 类和对象
OC中类的定义
接口部分
实现部分
类和文件
创建对象
使对象
四 实例变量操作
Objective-C简称OC,扩充自C语⾔的面向对象编程语言。是OS X和iOS操作系统的主要编程语⾔。
[thead]
因此,面向对象编程具有良好的可扩展性、可重用性。这一点在日后开发过程中可见一斑。
类:具有相同特征和行为的事物的抽象。
对象是类的实例。
类是对象的类型。
接⼝部分(.h文件):声明类的特征和行为。
实现部分(.m文件):内部的具体实现。
作用:声明类的实例变量和方法,即特征和行为。
包含内容:类名、父类名、实例变量、方法等。
作⽤:实现⽅法,即实现类的⾏为。
⽂件:.h称为接口文件或头文件,.m称为实现文件。默认设置如下:
使用类名命名文件。
.h文件管理类的接口部分;.m文件管理类的实现部分
文件和类本质没有关系。
创建对象分两步:分配内存空间和初始化。
分配内存空间:根据类中声明的实例变量为对象分配内存,将所有实例变量置为默认值0,并返回首地址。
初始化:为对象的实例变量设置初始值。
分配内存空间:
初始化:
通常这两部操作需要连写:
[Person alloc]返回值是对象的⾸地址,即对象。
p是跟对象同类型的指针变量,存储对象首地址,代指对象。
实例变量区分可见度,共三种public、protected、private,默认可见度为protected。
@public:实例变量访问修饰符号(公有);public修饰的实例变量,可以直接使用“—>”访问
二 面向对象编程OOP Object Oriented Programming
三 类和对象
OC中类的定义
接口部分
实现部分
类和文件
创建对象
使对象
四 实例变量操作
一 Objective-C概述
Cocoa和Objective-C是苹果公司Mac OS X操作系统的核心。1980年初,Brad Cox发明了Objective-C,意将流行的、可移植的C语言和Smalltalk语言结合在一起;1985年,Steve Jobs成立NeXT公司,NeXT选择Unix作为其操作系统,创建了NeXTSTEP(使用Objectiv-C开发的一款强大的用户界面工具包);1988年,NeXT公司开始使用Objective-C开发;1996年苹果公司收购了NeXT之后,NeXTSTEP被重命名为Cocoa,并得到了Macintosh编程人员的广泛认可,即1996年Objective-C成为了苹果主要编程语言。Objective-C简称OC,扩充自C语⾔的面向对象编程语言。是OS X和iOS操作系统的主要编程语⾔。
二 面向对象编程OOP (Object Oriented Programming)
面向过程 | 面向对象 | |
---|---|---|
特点 | 分析解决问题的步骤,实现函数,依次调用函数 | 分析某问题需要参与的对象,根据功能定义类,使⽤用对象的功能完成程序 |
侧重点 | 实现功能 | 对象的设计 |
语言举例 | C语言 | Objective-C, C++, Java等 |
三 类和对象
类和对象是面向对象的核心。步骤:定义类,创建对象,使用对象。类:具有相同特征和行为的事物的抽象。
对象是类的实例。
类是对象的类型。
OC中类的定义
定义类包含两部分:接口部分(.h文件)和实现部分(.m文件)。接⼝部分(.h文件):声明类的特征和行为。
实现部分(.m文件):内部的具体实现。
接口部分
接⼝部分标志:@interface … @end作用:声明类的实例变量和方法,即特征和行为。
包含内容:类名、父类名、实例变量、方法等。
#import <Foundation/Foundation.h> /* 类的声明: * 声明: 实例变量 和 方法 */ @interface Person : NSObject /* Person 类名 * NSObject 父类名 */ /* 声明实例变量, 在{}中 */ { @public /* 实例变量可见度修饰符 */ /* 姓名 */ // char name[20]; NSString *_name; /* OC中字符串使用NSString * * 说明是指针 * 实例变量必须使用_开头 */ NSString *_sex; /* 年龄 */ // int _age; NSInteger _age; /* NSInteger 相当于C中的int类型 */ } /* 声明方法 */ /* 声明说话打招呼的方法 */ - (void)sayHi; /* 方法的声明类似于函数的声明 * - 号不能省略, 叫做-号方法. */ - (void)info; @end
实现部分
实现部分标志:@implementation … @end作⽤:实现⽅法,即实现类的⾏为。
#import "Person.h" @implementation Person /* 方法的实现 * 方法声明之后必须实现, 否则编译时出现警告 */ - (void)sayHi { printf("Hello!\n"); // C语言的输出 NSLog(@"Hello!"); /* @相当于OC的一个标志 * 后面不用加'\n', 自动换行 */ } - (void)info { NSLog(@"姓名: %@, 性别: %@, 年龄: %ld", _name, _sex, _age); // %@ 相当于指代对象 } @end
类和文件
类:@interface … @end @implementation … @end⽂件:.h称为接口文件或头文件,.m称为实现文件。默认设置如下:
使用类名命名文件。
.h文件管理类的接口部分;.m文件管理类的实现部分
文件和类本质没有关系。
创建对象
类是模板,对象是具体表现,任何对象都要占用内存空间。创建对象分两步:分配内存空间和初始化。
分配内存空间:根据类中声明的实例变量为对象分配内存,将所有实例变量置为默认值0,并返回首地址。
初始化:为对象的实例变量设置初始值。
分配内存空间:
Person * p = [Person alloc];
初始化:
p = [p init];
通常这两部操作需要连写:
Person * p = [[Person alloc] init];
+ (id)alloc;+表示这个方法属于类,只能类执行。id返回值类型,表示任意类型的对象,即创建好的对象。
- (id)init;-表示这个方法属于对象,只能对象执行。id返回值类型,表示初始化完成的对象。
使⽤对象
指针存储对象的首地址,代指对象。OC中使用指针代指对象,进行操作。Person *p = [Person alloc];先执行“=”右侧
[Person alloc]返回值是对象的⾸地址,即对象。
p是跟对象同类型的指针变量,存储对象首地址,代指对象。
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { /* 1.定义类 * 2.创建对象 * 3.使用对象 */ /* 定义类, 创建一个类名的.h 和 .m文件 * .h 声明: 实例变量 和 方法 * .m 实现部分: 实现方法 */ /* 创建对象 * 1. 导入.h 头文件 * 2. 开辟内存空间 * 3. 初始化 */ /* Person : 类名 * personOne : 对象名 * alloc : 方法名, 作用开辟空间. + 方法, 只有类能使用, 返回值类型id, 对象类型. */ Person *personOne = [Person alloc]; personOne = [personOne init]; /* 初始化, init - 方法, 对象使用的方法, 返回值类型id, 对象类型 */ /* 分配内存空间并初始化 */ Person *personTwo = [[Person alloc] init]; /* 使用对象(方法) */ NSLog(@"%d, %s", __LINE__, __func__); // 行数 调用模块 [personOne sayHi]; [personOne info]; } return 0; }
四 实例变量操作
实例变量在初始化只做少量设置,后期还需要进⾏设置。实例变量区分可见度,共三种public、protected、private,默认可见度为protected。
@public:实例变量访问修饰符号(公有);public修饰的实例变量,可以直接使用“—>”访问
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { /* 赋值操作 */ Person *personOne = [[Person alloc] init]; [personOne info]; /* 姓名赋值 */ personOne->_name = @"Zhang San"; personOne->_sex = @"man"; personOne->_age = 20; /* 取值操作 */ /* 输出姓名 */ NSLog(@"姓名: %@", personOne->_name); NSLog(@"性别: %@", personOne->_sex); NSLog(@"年龄: %ld", personOne->_age); [personOne info]; } return 0; }
相关文章推荐
- objective-c中字符串长度计算
- objective-c中字符串长度计算
- 【iOS开发之Objective-C】数据持久化--文件和归档
- objective-c 运算符优先级排序
- Objective-C中的instancetype和id区别
- 用objective c开发的第一个mac程序(2)——初识oc cocoa swift
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十二章 类别
- Spark源码阅读笔记之BlockObjectWriter
- 用objective-c开发的第一个mac程序(1)——依赖库的生成
- objective C程序 NSString用法和类的概念
- Objective-C语法之代码块(block)的使用
- net.sf.json.JSONObject需要jar包
- gtk+2.0中GtkObject结构中没有klass成员的解决办法
- gtk+2.0中GtkObject结构中没有klass成员的解决办法
- gtk+2.0中GtkObject结构中没有klass成员的解决办法
- 动态库的动态链接(error while loading shared libraries,cannot open shared object file)
- [Objective-C] 014_Objective-C 代码规范指南
- 【Entity Framework】初级篇--ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager类的介绍
- WPF中DependencyObject与DependencyProperty的源码简单剖析
- 了解Objective-C中Selector基本概念和操作