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 ...
随机推荐
- Xcode中文乱码问题
老师给拷贝的程序用Xcode打开中文显示是乱码,而预览里面是正常显示的,Xcode默认编码UTF-8没错的,怎么办呢? 解决办法:用自带的文本编辑器打开,全选,复制,Xcode中打开文件,粘贴,ok~ ...
- ftp虚拟账号登陆
配置使用虚拟用户登录的FTP服务器,可以避免使用操作系统帐号作为FTP用户带来的一些安全问题,也便于通过数据库或其它程序来进行管理.废话不多说,这里记录下ftp虚拟账号登陆的部署过程及其中遇到的问题: ...
- iOS math.h数学函数
在实际工作中有些程序不可避免的需要使用数学函数进行计算,比如地图程序的地理坐标到地图坐标的变换.Objective-C做为ANSI C的扩展,使用C标准库头文件<math.h>中定义的数学 ...
- poj3371
Flesch Reading Ease Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2269 Accepted: 710 De ...
- C++ map的使用
C++ map的基本操作和使用 来源:(http://blog.sina.com.cn/s/blog_61533c9b0100fa7w.html) - C++ map的基本操作和使用_Live_新浪博 ...
- Linux 字符集转化
命令行"iconv --list" 查看Linux操作系统支持的字符集 iconv_open 设置字符集转化 --iconv_t iconv_open(const char *to ...
- sudo权限添加 和 rpm、deb之名词解释
sudo权限添加: 刚开始用Center_os Linux操作系统,想装个输入法,搜了一下,看到linux下的搜狗输入法(帖子链接)下载下来的文件的扩展名是.deb,直接用帖子上的一个命令: sudo ...
- PHP基础14:$_REQUEST
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Android开发探秘之二:导入存在的项目及其注意事项
网上看到有jsoup写的例子,就下载下来进行了研究,但是发现不会导入,于是就百度一下,发现了方法:也就是依次点击“File”->“Import”->“General”->“Exist ...
- 反射中getMethods 与 getDeclaredMethods 的区别
public Method[] getMethods()返回某个类的所有公用(public)方法包括其继承类的公用方法,当然也包括它所实现接口的方法.public Method[] getDeclar ...