IOS基础之 (四) OC对象
一 建立一个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对象的更多相关文章
- iOS 基础 第四天(0809)
0809 - 内存管理,只对oc对象生效. alloc.retain.release.retainCount 局部变量是放在栈里面的,oc对象是放在堆里面的.栈里面的内容系统自动回收,而堆里面的内容还 ...
- IOS基础之 (一) OC基础语法
一 OC语法 1.关键字 基本上所有关键字都是以@开头,比如: @interface , @implementation, @end, @public, @protected, @private 2. ...
- ios学习之旅--oc对象的关系
1.匿名对象:就是没有名字对象 1.匿名对象仅用一次 使用场景: 1.当我们仅仅要调用一个对象的某个方法一次的时候能够使用匿名对象 2.匿名对象能够作为函数的实际參数 #imp ...
- IOS学习之路--OC的基础知识
1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...
- iOS - 基础知识总结(OC版) 面试必看 再不看就要用swift了
OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装.继承.多态.它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定.动态加载等).总体来讲,OC确实是一门不错 ...
- 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法
四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...
- iOS下JS与OC互相调用(四)--JavaScriptCore
前面讲完拦截URL的方式实现JS与OC互相调用,终于到JavaScriptCore了.它是从iOS7开始加入的,用 Objective-C 把 WebKit 的 JavaScript 引擎封装了一下, ...
- iOS进阶一OC对象的本质
OC对象的本质 平时编写的Object-C代码,底层实现其实都是C/C++代码. 所以Objective-C的面向对象都是基于C/C++的数据结构实现的,OC对象内部可以容纳不同数据类型的数据,因此可 ...
- iOS Foundation框架 -3.利用NSNumber和NSValue将非OC对象类型数据存放到集合
1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary ...
随机推荐
- 将TP引擎改为smarty引擎
在common/config文件里设置'TMPL_ENGINE_TYPE'=>'Smarty'即可,但要注意,在模板文件里的css样式{}要用一对{literal}{/literal}标签包裹, ...
- js fs read json 文件json字符串无法解析
读取 xxx.txt(里面就是一段 json)-> JSON.parse( fs.readFileSync( xxx.txt ) ) -> 报 SyntaxError: unexpecte ...
- js常见执行方法$(document).load(),$(document).ready()
$(document).load(); 当web页面以及其附带的资源文件,如CSS,Scripts,图片等,加载完毕后执行此方法.常用于检测页面(及其附带资源)是否加载完毕. $(document). ...
- jquery中$("#afui").get(0)为什么要加get(0)呢?
jquery中$("#afui").get(0)为什么要加get(0)呢? 2015-04-13 17:46SYYZZ3 | 浏览 509 次 Jquery $("#a ...
- PKI公钥处理思路
背景: 在使用任何基于RSA服务之前,一个实体要真实可靠的获取其他实体的公钥. 1,一个可以确认公钥身份的方案:[离线确认] 主:B做同样的事情得到A的公钥. 但是这种方法扩展性差,不可行. ...
- U3D rootMotion
Body Transform The Body Transform is the mass center of the character. It is used in Mecanim's retar ...
- 浅谈VC++中预编译的头文件放那里的问题分析
用C++写程序,肯定要用预编译头文件,就是那个stdafx.h.不过我一直以为只要在.cpp文件中包含stdafx.h 就使用了预编译头文件,其实不对.在VC++中,预编译头文件是指放到stdafx. ...
- [CareerCup] 1.6 Rotate Image 翻转图像
1.6 Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, write a m ...
- [CareerCup] 11.4 Sort the File 文件排序
11.4 Imagine you have a 20 GB file with one string per line. Explain how you would sort the file. 这道 ...
- poj2154-color-polyan次二面体+欧拉函数优化
N<=1e9,O(nlogn)的做法会超时.从枚举置换转变为枚举轮换长度,然后可以利用欧拉函数,把复杂度变为O(√n * logn) /*---------------------------- ...