一 建立一个OC的类

完整的写一个函数:需要函数的声明和定义。

完整的写一个类:需要类的声明和实现。

1.类的声明

声明对象的属性和行为

 #import <Foundation/Foundation.h>

 @interface Car : NSObject
{
@public
int speed;//速度
int wheels;//轮子
} - (void) initSpeed:(int)speed withWheels:(int) wheels ; - (void) run; @end

第3行:NSObject目的是让Car这个类具备创建对象的能力。

第5行:@public 可以让外部的指针间接访问对象内部的成员变量。

第 6,7行:定义对象的属性。

第10行:定义一个有入参的行为。

第12行:定义对象的行为。只要是OC对象的方法,必须以减号 - 开头。

在OC方法返回值中任何数据类型都必须用小括号()扩中。

实现@interface中声明的方法。

2.类的实现

Car 类的实现。

 #import "Car.h"

 @implementation Car

 - (void)run{
NSLog(@"车子跑起来。车速是%d km/h,轮子数是%d", speed, wheels );
} - (void)initSpeed:(int)speed withWheels:(int)wheels{
self -> speed = speed;
self -> wheels = wheels;
} @end

第9行代码: 给对象的属性speed, wheels赋值初始值。不能在类的声明 @interface 中对属性就行初始化。

在xcode中,自动实现函数的实现:

  输入 "-" , 然后输入函数的头几个字母,选中xcode自动弹出的方法。

3.类的调用

 #import <Foundation/Foundation.h>
#import "Car.h" int main(int argc, const char * argv[]) {
Car *car = [Car new];
car -> wheels = ;
car -> speed = ;
[car run]; [car initSpeed: withWheels:];
[car run]; return ;
}

第5行:在OC中,想执行一些行为,就接上一个中括号[行为执行者 行为名称] 。利用类来创建对象。

[Car new]会创建出一个新对象,并且会返回新对象本身(新对象的地址)。

第6,7行:给 car所指向对象的wheels,speed属性赋值。

第8行:给car所指向的对象发送一条run消息。

二对象与函数参数

例子1

 #import <Foundation/Foundation.h>
#import "Car.h" void test1(Car *newC){
newC -> wheels = ;
} int main(int argc, const char * argv[]) {
Car *car = [Car new];
car -> wheels = ;
car -> speed = ;
[car run]; test1(car );
[car run]; return ;
}

第16行代码的返回结果为:车子跑起来。车速是100 km/h,轮子数是5

内存图如下:

例子2

 #import <Foundation/Foundation.h>
#import "Car.h" void test2(Car *newC){
Car *c2 = [Car new];
c2 -> wheels = ;
c2 -> speed =; newC = c2;
newC -> wheels = ;
} int main(int argc, const char * argv[]) {
Car *car = [Car new];
car -> wheels = ;
car -> speed = ;
[car run]; test2( car );
[car run]; return ;
}

第20行代码的返回结果为 车子跑起来。车速是100 km/h,轮子数是4

内存图如下:

面向对象封装的好处:

1)更加接近人类的思考方式。

2)只需要关注对象,不需要关注步骤。

三 OC对象的类型判断

 #import <Foundation/Foundation.h>

 @interface A: NSObject

 @end

 @implementation A

 @end

 @interface B : NSObject

 @end

 @implementation B

 @end

 int main(int argc, const char * argv[]) {
A *a = [[A alloc]init];
NSLog(@"%d" , [a isKindOfClass:[NSObject class]]);
NSLog(@"%d" , [a isKindOfClass:[A class]]);
NSLog(@"%d" , [a isKindOfClass:[B class]]); return ;
}

返回结果

 -- ::18.105 T3[:]
-- ::18.106 T3[:]
-- ::18.106 T3[:]

IOS基础之 (四) OC对象的更多相关文章

  1. iOS 基础 第四天(0809)

    0809 - 内存管理,只对oc对象生效. alloc.retain.release.retainCount 局部变量是放在栈里面的,oc对象是放在堆里面的.栈里面的内容系统自动回收,而堆里面的内容还 ...

  2. IOS基础之 (一) OC基础语法

    一 OC语法 1.关键字 基本上所有关键字都是以@开头,比如: @interface , @implementation, @end, @public, @protected, @private 2. ...

  3. ios学习之旅--oc对象的关系

    1.匿名对象:就是没有名字对象     1.匿名对象仅用一次     使用场景:     1.当我们仅仅要调用一个对象的某个方法一次的时候能够使用匿名对象 2.匿名对象能够作为函数的实际參数 #imp ...

  4. IOS学习之路--OC的基础知识

    1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...

  5. iOS - 基础知识总结(OC版) 面试必看 再不看就要用swift了

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装.继承.多态.它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定.动态加载等).总体来讲,OC确实是一门不错 ...

  6. 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法

    四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...

  7. iOS下JS与OC互相调用(四)--JavaScriptCore

    前面讲完拦截URL的方式实现JS与OC互相调用,终于到JavaScriptCore了.它是从iOS7开始加入的,用 Objective-C 把 WebKit 的 JavaScript 引擎封装了一下, ...

  8. iOS进阶一OC对象的本质

    OC对象的本质 平时编写的Object-C代码,底层实现其实都是C/C++代码. 所以Objective-C的面向对象都是基于C/C++的数据结构实现的,OC对象内部可以容纳不同数据类型的数据,因此可 ...

  9. iOS Foundation框架 -3.利用NSNumber和NSValue将非OC对象类型数据存放到集合

    1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary ...

随机推荐

  1. XCode的 Stack Trace,调试时抛出异常,定位到某一行代码

    在Xcode调试程序的时候,总是会出现不知道错误在什么地方的问题,很是捉急,现在又一个办法,可以具体定位到错误行的代码,试一下吧?超级好用 操作很简单: 1.在XCode界面中按cmd + 6快捷键, ...

  2. 解析 HTTP(HttpURLConnection getResponseCode)

    HTTP 请求 客户端通过发送 HTTP 请求向服务器请求对资源的访问.HTTP 请求由三部分组成,分别是:请求行.消息报头和请求征文. 3.1.请求行 请求行以一个方法符号开头,后面跟着请求 URI ...

  3. 异步fifo的设计

    本文首先对异步 FIFO 设计的重点难点进行分析 最后给出详细代码 一.FIFO简单讲解 FIFO的本质是RAM, 先进先出 重要参数:fifo深度(简单来说就是需要存多少个数据)           ...

  4. Linux 信号概念

    程序在执行的时候,几乎任何时刻都会反生事件. 信号通常用来向一个进程通知事件. 信号是不可提前预知的,所以信号是异步的. 信号随时都可能发生,接收信号的进程也可以没有控制权. 每个信号名都以SIG开头 ...

  5. log4j发送邮件乱码

    Log4J发日志邮件给多个接收者及标题.正文乱码问题 以前开发的系统没有单独的日志管理,所有的日志统一输出到tomcat后台一个文件里,不几天就是好几G,现在要整体增加一个Log4J管理日志的功能,其 ...

  6. WebSocket 服务器4

    Java Websocket实例 Websocket   2015-04-11 14:11:54 发布 您的评价:       4.4   收藏     6收藏 介绍 现很多网站为了实现即时通讯,所用 ...

  7. LeetCode-Decode String

    Given an encoded string, return it's decoded string. The encoding rule is: k[encoded_string], where ...

  8. Linux 读书笔记 二

    一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 若不小心登出后,直接刷新页面即可 2. 环境使用 完成实验后可以点击桌面上方的“实验截图”保存并分 ...

  9. CDC类

    CDC :class of device context Windows使用与设备无关的图形设备环境(DC :Device Context) 进行显示 .MFC基础类库定义了设备环境对象类----CD ...

  10. [bzoj 1026]windy数(数位DP)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1026 分析: 简单的数位DP啦 f[i][j]表示数字有i位,最高位的数值为j的windy数总 ...