ios c语言调用oc方法,ios开发之OC基础-类和对象(示例代码)
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点。建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再将零散的知识点整理出来。这样的学习方法会带来更多的收获,同时要多做练习,按照思路,默写、改写代码。在这里,感谢欧阳坚老师,学习你的课程使我走上了ios的开发之路。
一定要明确一个要从事的方向,要不然就会感到迷茫。学习ios开发,并且从事ios开发这个行业,这就是我的选择。看到我的博客系列文章,其中大多是关于C++、Qt、Linux网络编程、OpenGL、Unity3D等方面。从表面上看和ios开发似乎没有多少关联,但是有了这些方面的学习经验给我带了一定的基础。ios开发主要用oc和swift语言,而oc是从事ios开发的基础。众所周知,oc(objective-c)即面向对象的C,在C语言的基础上增加了面向对象的机制和内存管理这一对翅膀,使得OC在做ios开发如虎添翼。
本系列文章仅供个人学习和分享给志同道合的猿友,不存在商业用途。
OC是一门面向对象的语言,既然是面向对象就少补了类和对象。我们知道在C++中面向对象的三大机制:继承、封装、多态,这在OC中也同样具备。下面就具体说一下OC中的类和对象。
类的定义
类是由属性和方法组成的,属性表示类的特征,方法表示类的动作。
类的定义格式
OC中的类定义和C++中的类定义有些不同,在OC中类的头文件为***.h,而源文件却是以.m为后缀的文件-***.m。
接口在头文件中:
@interface类名:基类名称{//属性名称
}//这里不加";"号//方法声明
@end//声明结束
类名首字母需要大写,NSObject是OC所有类的基类,接口中只包含方法的声明,方法有类方法和实例方法。
实现在源文件中:
@implementation类名//方法实现
@end
类的访问权限
有三种访问权限:@public,@private,@protected。属性默认的权限是保护类型,方法默认的权限是公有类型。
OC中的构造函数以initWith***开头,主要做一些初始化工作,析构函数为dealloc,如果自己写类没有定义,系统会自动提供一个默认的构造函数和析构函数。
举个例子说明一下,如下代码:
-(id) init{
self=[super init];//使用super父类对象,self表示本类对象
if(self){
NSLog(@“在构造函数中name%@ age%d %s”,_name,_age,_FUNCTION_);
}returnself;
}-(id)initWithName:(NSString *)newName{
}-(id)initWithName:(NSString*)newName withAge:(int) newAge{
}-(void)dealloc{//析构函数在对象完全消失的时候调用//对象销毁时调用,对象计数器=0//dealloc不要手动调用[person dealloc],应该调用[person release];//release销毁对象,release计数器减一,减到0就自动调用dealloc。
[super dealloc];
}
在OC中也可以使用"obj->arrt"的形式访问和设置属性字段,但前提是该字段必须被声明为公有类型。但是这种方式不建议使用。
#import
@interfacePerson:NSObject{@public
int_age;
NSString*_name;
}-(void) setAge:(int)age;-(int)getAge;@end
@implementationPerson-(void) setAge (int)age{
_age=age;
}-(int)getAge{return_age;
}@end
intmain()
{
@autoreleasepool{
Person*person =[[Person alloc] init];
person->age = 20;
person->name =@”小红”;
}return 0;
}
Person *person = [[Person alloc] init]就是person指向的对象分配了内存空间,并进行了初始化。也可以用Person *person = [Person new],OC中也支持new运算符。因为age、name字段被声明为public类型,所以可以使用指针调用的方式来设置对象的属性。
参数标签
-(Person *)init:(int) newID:(int) newAge;//没有使用参数标签
-(Person *)initWithID:(int) newID andAge:(int) newAge;//使用参数标签
第一个参数可以不带标签,从第二个参数开始可以带标签。现在的方法名为:initWithID:andAge:,参数标签可以提高方法名的可读性,同时还可以用于方法的重载。
方法重载
在OC中,方法的重载不像C++那样可以通过,参数类型,参数个数进行区分了。OC中不是严格的函数重载。
//方法名相同并且参数个数相同但参数类型不同,在OC中构不成方法重载
-(int) doSth:(int) x;-(int) doSth:(float) x;-(int) doSth:(int) x:(int) y;-(int) doSth:(float) x:(float) y;//用参数标签可以构成方法重载
-(int) doSth:(int) x:(int) y;-(int) doSth:(float) x andY:(float) y;
ios c语言调用oc方法,ios开发之OC基础-类和对象(示例代码)相关推荐
- ios开发之OC基础-类和对象
ios开发之OC基础-类和对象 本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录 ...
- IOS开发之UI基础LOL英雄展示-15
IOS开发之UI基础LOL英雄展示-15 // // ViewController.m // 15-英雄展示-单组数据 // // Created by 鲁军 on 2021/2/3. //#impo ...
- Android NDK开发之 NEON基础介绍
原文:http://blog.csdn.net/app_12062011/article/details/50434259 Android NDK开发之 NEON基础介绍 这是官方介绍: http:/ ...
- C#进行MapX二次开发之MapX基础知识
C#进行MapX二次开发之MapX基础知识 MapX的主要技术特点 (1). 以表(Table)的形式组织信息 每一个表都是一组MapInfo文件,这些文件组成了地图文件和数据库文件.为使用MapIn ...
- 050.前端开发之HTML基础及常用标签
050.前端开发之HTML基础及常用标签 文章目录 一.前端开发介绍 (一)前端开发都有哪些内容 1.HTML是什么? 2.CSS 3.JavaScript 4.HTML.CSS和JavaScript ...
- ios 更新尺寸调用什么方法_iOS开发经验总结(上)
来源:蝴蝶之梦天使 链接:http://www.jianshu.com/p/d333cf6ae4b0 在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑). 一. iPho ...
- iOS开发之OC入门(类的基础知识)
内存中的五大区域 栈:存储局部变量,局部变量作用域执行完会被立即回收 堆:程序员手动申请的字节空间 malloc calloc realloc BSS段:存储未被初始化的全局变量和静态变量,初始化后回 ...
- iOS开发之OC入门(类的使用)
占位符 %p打印指针的值 %@打印指针对应的值,输出的格式:<对象所属的类名:对象的地址> NSLog%@方法调用传入对象的description的方法,拿到该方法的返回值,这个返回值是一 ...
- JNI基础 c语言调用java方法
利用c语言调用java无参的方法 java方法 com.example.jniparsedata.ParseData类中的方法 //打印 public void sayHelloFro ...
最新文章
- 基于EasyNVR摄像机网页无插件直播服务二次开发实现H5播放页面的简单集成方案...
- Android布局管理器-从实例入手学习相对布局管理器的使用
- MSTP多业务传输平台对设备接口的要求有哪些?
- Educational Codeforces Round 104 (Rated for Div. 2)A~E解题报告
- mysql binlog过期策略_对存在过期 binlog 的 MySQL5.7 添加从服务器
- tomcat-maven插件热部署(简洁版)
- OpenStack推出最新版本Newton,显著提升单一云平台 对虚拟化、裸机和容器的管理...
- 三阶魔方中心块调整配方和记忆方法
- ibatis Dynamic总结(ibatis使用安全的拼接语句,动态查询)
- SQL server 增删改查语句
- 微信小程序实现转义换行符
- git merge和git merge --no-ff有什么区别?
- jvm 的内存分配方式
- 【原创】纯CSS 仿U9论坛 箭形导航栏 兼容IE6+IE7+FF
- 海康威视云台相机4200客户端调试记录
- 【VHDL】四位全减器
- Mysql出现Table 'performance_schema.session_status' doesn't exist
- 天下3 最多的服务器,《天下3》服务器合并规则
- 下载不了代码仓库的代码怎么办?
- 关于贯彻《财政部 税务总局关于调整增值税税率的通知》的通知 〔2018〕405
热门文章
- 1970年至今(2007/7/20)原油价格走势图
- Autel MaxiSYS PRO MS908P Diagnostic System with Wireless VCI J-2534
- 已解决bs4.FeatureNotFound: Couldn‘t find a tree builder with the features you requested: html5Lib. Do y
- 小白python教程_面向小白的Python教程:入门篇(三)
- 使用js动态添加文本框 并在后台取文本框数据
- 浅谈“LDR6023”之最火的Type-C PD协议芯片应用理解第一部
- 小引写帖子,我也写帖子
- docker desktop如何清理redis缓存(mac)
- STM32F1中断嵌套及内部中断详解——新浪博客迁移
- 混沌密码能对抗量子计算机吗,使命召唤17混沌行动密码是多少 混沌行动解密流程...