IOS基础之 (三) 类的声明和对象的创建
一 OC类的声明和实现语法
1.接口的声明
@interface NewClassName: ParentClassName
{
实例变量
...
} 方法的声明
...
@end
//...表示省略了一些代码的意思。
2.类的实现
@implementation NewClassName
{
方法的实现
//code
...
} @end
//...表示省略了一些代码的意思。
二 自定义类
任何一个类都可以通过以下两种途径描述对象:
- 类的方法(包括实例方法和类方法)。
- 类实例所包含的实例变量。
下面的例子创建一个名为 Person 的类,需要使用两个文件类定义 Person类: Person.h 和 Person.m .
- Person.h 称为头文件(header file)或接口文件(interface file),包含实例变量和方法的声明。
- Person.m 称为实现文件(inplmentation file),包含所有方法代码的实。
创建一个新的项目,类型为基于 OS的Application的Command Line Tool,名称为 FirstClass。

创建新类的步骤是,选择 File -> New -> File..... 在新出现的窗口左侧,选择 OS X区域中的 Source, 然后选择Cocoa模板。将类命名为
Person,并将其设置为 NSObject的子类,最后确认勾选了 FirstClass目标,单击 Save。


新创建的类文件(Person.h和Person.m)会在项目导航面板上出现。

打开Person.h 声明2个实例变量和3个实例方法,代码如下:
#import <Foundation/Foundation.h> //Person类继承了NSObject类所定义的全部实例变量和方法
@interface Person : NSObject
{
//Person拥有2个实例变量
int age;
NSString *name;
} //确认以下方法,可以为Person的实例变量赋值
- (void)setAge:(int)_age;
- (void)setName:(NSString *)_name;
- (void)sayHello; @end
实例变量的声明卸载花括号的里面。方法的声明要写在变量声明之后,且花括号的外面。
这段代码告诉编译器,程序定义了一个名为 Person的新类,拥有NSObject类的全部方法和实例变量。另外还增加了两个新的实例变量,名为age的int变量和名为name的NSString变量。最后还增加了3个实例方法,
这些方法会在Person.m中实现。
打开Person.m,删除全部已有的方法代码,然后为之前声明的方法加入实现代码。
#import "Person.h" @implementation Person - (void)setName:(NSString *)_name
{
name = _name;
} - (void)setAge:(int)_age
{
age = _age;
} - (void)sayHello
{
NSLog(@"hello %@, I am %d years old.", name, age);
} @end
需要注意的时,有Xcode创建的Person.m已经自动导入了Person.h。此外,在Person.m中实现的方法,其方法名必须和在Person.h中声明的相应方法名完全匹配。在Xcode的帮助下,很容易做到这一点,
Xcode 会根据已经声明的方法,自动提供候选方法名。
以上代码实现了Person.h中声明的全部方法,至此Person类创建完毕,修改 main.m,使用新创建的Person类,代码如下:
#import <Foundation/Foundation.h>
#import "Person.h" int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建Person实例
Person *person = [[Person alloc] init]; //为实例赋值
[person setAge:];
[person setName:@"xpws"]; //调用 sayHello方法
[person sayHello ]; }
return ;
}
构建并运行程序。注意:以上代码导入了Person.h,目的是让编译器知道那些在main()使用的Person类方法是怎样声明的。
三 类的定义语法
类的接口定义方法如下:
@interface 类的名字 : 父类的名字 {
实体变量类型 实体变量名字;
}
- (返回值类型)方法名字;
+ (返回值类型)方法名字;
- (返回值类型)方法名字:(变量类型) 变量名字 标签1:(变量类型) 变量1名字;
...
@end
//...表示省略了一些代码的意思。
类的定义部分如下,这部分内容的关键点为@implementation和@end。
@implementation 类的名字
-(方法返回值) 方法名字
{
方法定义
...
}
-(方法返回值) 方法名字:(变量类型) 变量名字
{
方法定义
...
} @end //...表示省略了一些代码的意思。
四 类的实例化
Objective-C使用消息(Message)来调用方法,所谓的消息就是一个类或者对象可以执行的动作。消息的格式如下:
[对象或者类名字 方法名字:参数序列];
首先我们观察到有两个中括弧, 最右边的括弧之后是一个分号,当编译器遇到了这个格式之后会把中间的部分当作一个消息来发送。在上文的表达式当中,包括中括弧的所有部分的内容被称作消息表达式(Message expression),“对象或者类名字”被称作接收器(Receiver),也就是消息的接受者,“方法名字:参数序列”被称为一个消息(Message),“方法名字”被称作选择器(Selector)或者关键字(Keyword)。Objective-C和C语言是完全兼容的,C语言里面的中括弧用于表示数组,但是数组的格式明显和消息的发送的格式是不一样的,所以我们可以放心,编译器不会把我们的消息发送当作一个数组。
二 OC工程里引入C语言
1. 新建一个C语言的头文件和实现文件
Hi.h
#ifndef Hi_h
#define Hi_h #include <stdio.h> void sayHi(); #endif
Hi.c
#include <stdio.h>
#include "Hi.h" void sayHi(){
printf(".. say ...\n"); }
2. 在 main.m中引入hi.h 头文件
#import <Foundation/Foundation.h>
#import "Hi.h" int main(int argc, const char * argv[]) { sayHi(); return ;
}
在第2行导入c的头文件,可以改为 #include "Hi.h"
IOS基础之 (三) 类的声明和对象的创建的更多相关文章
- iOS 基础 第三天(0808)
0808 分类的使用注意 分类只可以增加方法,不可以增加成员变量 分类可以访问原来类中声明的成员变量 分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用 方法调用的优先 ...
- c++类的声明和对象的定义---10
原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量:创建对象的过程也叫类的实例化. ...
- java类的初始化和对象的创建顺序
学习java编程思想--类的初始化p146 类的加载顺序* 1加载器启动找到 xxx.class文件,通过extends关键字寻找基类,先加载基类* 2类初始化先初始化static成员变量和stati ...
- iOS 基础 第三天(0807)
0807 成员变量作用域###### 如下图所示: 这里要注意手写的成员变量/实例变量默认的作用域是private,所以外部指针类型的对象无法直接访问,这起到一定的保护作用.但可以在当前类内部@imp ...
- mysql基础教程(三)-----增删改、子查询、创建管理表、约束和分页
插入 INSERT语句语法 从其它表中拷贝数据 • 不必书写 VALUES 子句. • 子查询中的值列表应与 INSERT 子句中的列名对应 update语句 • 可以一次更新多条数据. • 如果需要 ...
- javascript基础(三): 操作DOM对象(重点)
DOM:文档对象模型 核心 浏览器网页就是一个Dom树形结构! 更新:更新Dom节点 遍历Dom节点:得到Dom节点 删除:删除一个Dom节点 添加:添加一个新的节点 要操作一个Dom节点,就必须要先 ...
- XMPPFrameWork IOS 开发(三)登录
原始地址:XMPPFrameWork IOS 开发(三) XMPP中常用对象们: XMPPStream:xmpp基础服务类 XMPPRoster:好友列表类 XMPPRosterCoreDataSto ...
- C#基础入门 三
C#基础入门 三 类 类使用class关键字进行声明,前面加一个访问修饰符,public class car{} 访问修饰符:修师傅可以用来修饰类和类成员等,控制它们的可见度 修饰符关键字分别为:pu ...
- C#核心基础--类的声明
C#核心基础--类的声明 类是使用关键字 class 声明的,如下面的示例所示: 访问修饰符 class 类名 { //类成员: // Methods, properties, fields, eve ...
随机推荐
- requirejs学习之路
2006年,由于微软的名声比SUN公司的名声要大,选择了asp.net,利用VS开发了很多项目,那个时候觉得自己真是很牛气,什么都能做:现在随着互联网和移动互联的冲击,这些传统技术也受到了冲击,由于A ...
- codevs 3008 加工生产调度[贪心]
3008 加工生产调度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 某工厂收到了n个产品的订 ...
- 10301 MySQL各个版本区别及下载
参考:http://www.admin10000.com/document/62.html MySQL 的官网下载地址:http://www.mysql.com/downloads/ 在这个下载界面会 ...
- Java中的Random()函数
今天在做Java练习的时候注意到了Java里面的一个随机函数——Random,刚开始只是知道这个函数具有随机取值的作用,于是上网搜索了资料一番,做了一下一些关于Random函数的总结: Java中 ...
- 【夯实Mysql基础】MySQL在Linux系统下配置文件及日志详解
本文地址 分享提纲: 1. 概述 2. 详解配置文件 3. 详解日志 1.概述 MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下:在Linux下叫my.cnf,该文件位于 ...
- JSTL 标签库 使用
标签库概要: 一.C标签库介绍 1.1.<c:> 核心标签库 JSTL 核心标签库(C标签)标签共有13个,功能上分为4类:1.表达式控制标签:out.set.remove.catch2 ...
- 让PowerShell用上Git
废话 废话一下为什么要在PowerShell上使用Git,有一些项目在公司要开发,回到家了忽然有灵感想要写一写,这个时候将代码托管到网上是最为方便,我所使用的开发工具是vs2013,自然而然想到使用T ...
- 20135220谈愈敏Linux Book_17
第17章 设备与模块 关于设备驱动和设备管理的四种内核成分: 设备类型:在所有 Unix 系统中为了统一普通设备的操作所采用的分类. 模块: Linux 内核中用于按需加载和卸载目标码的机制. 内核对 ...
- 第十二章 process.tar.gz中代码的运行
第一部分:process 第二部分:env 第三部分:fifo 第四部分:pipe 第五部分:signal
- 用SugarORM快速开发需要同步和保存大量数据的Android互联网客户端
最近开发的一个项目主要有两个特点,这两点也是在项目开发前需要着重去规划解决方案的: 需要和Rest服务端请求大量的数据 同时这些数据本地也要保存到sqlite数据库 对于第一点,目前的Volley.G ...