Object-c的基础概念(一)_shallon_luo的博客-程序员秘密

技术标签: float  interface  object  

下文为阅读笔记。

 

一:Object-c的类基本定义

 

1. 类定义在@interface和@end之间。

2.MyClass:NSObject的方式定义子类和父类。

3.{}中定义类的对象成员

4.-/+定义的是方法,-定义的是对象的方法,+定义的是类的方法。对象是类的一个实例。对于对象的方法,也即是,当使用该方法之前必须先生成该类的一个特定对象。

 

二:强类型和弱类型的引用

 

Object-C的对象可以使用强类型引用和弱类型引用

MyClass *myObject1;  // Strong typing
id       myObject2;  // Weak typing

MyClass * myObject1是一种强类型的定义方法,该定义方法与C++类似。

id myObject2是一种弱类型的定义方法,弱类型的对象主要用于集合类,集合类的对象通常在运行时才知道集合中内部的对象类型定义。弱类型的引用的使用与Object-C的动态类型绑定(Dynamic Typing)息息相关,在Object-C中,每一个对象包含一个成员变量isa,保存着对象属于哪一个类的类型信息。于是,开发人员能够在运行时刻知道对象的定义,例如,其父类是什么,实现了什么函数等。

 

 

三:函数定义和调用

Object-C的函数定义和调用都比较特别,为了让对象执行某个操作,需要向对象发送消息,因此,函数的调用被称作Object Messaging。其消息的定义是[Receiver Message],前者是接收消息的对象,后者是消息的本身。此处先看看函数的定义:

 

函数的定义由函数的类型标记(Method type identifier)、返回值(return type)、一个或者多个的函数签名关键字(Method signature)、参数的类型和命名信息组成。

 

函数的真实命名由各个级联的函数签名关键字组成。例如上述函数定义中函数真实的命名是(insertObject:atIndex:)分号隔开参数的声明。局部的函数签名关键字看起来更像是函数参数的内部命名,真正的参数命名反而在Object Messaging中不出现。例如,上述的函数调用可以写成

[myArray insertObject:anObject atIndex:0];

再来看一个例子,前一行是函数的定义,后面一行是函数的调用,可以看到后面的调用Ojbect Messaging中,写的是函数方法签名的关键字
(Method signature keywords)而不是参数命名(parameter names)。由于没有特别的函数名一项,注意其第一个函数方法签名关键字的
命名看起来就像函数名(changeColorTo)+第一个参数(Red)

- (int)changeColorToRed:(float)red green:(float)green blue:(float)blue;
[myColor changeColorToRed:5.0 green:2.0 blue:6.0];

上述例子中,实例方法的真是命名是: -changeColorToRed:green:blue: ,冒号隔开的各个参数顺序不能更改。





 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shallon_luo/article/details/6217663

智能推荐

正确的 Composer 扩展包安装方法_xianglingchuan的博客-程序员秘密

问题说明我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的:composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害。因为 composer update 的逻辑是按照 composer.json 指定的扩展包版本规则,把所有扩展包更新到最新版本,注意,是 所有扩展包,举个例子,你在项目一开始的时候使用了 monolog,当时的配置信息

Java 高效读取大数据文件—最优方法_java高效读取大文件_Andrewlu58的博客-程序员秘密

数据背景,一个文件大小>=10G,每一行都是一个json对象数据 如下:{"id":"C0D962","time":"2015-09-01 23:59:54","lon":"113.534","lat":"22.214",……}高效读取的方法:方法一:      readLine()占用总时间的80%,使用BufferedReader,每次读入5M数据.减少IO.如:

POJ1258 最小生成树prim算法_poj3723 prim算法_LarryNLPIR的博客-程序员秘密

典型的prim算法这类题目可以稍作变形,比如POJ2421#include #include #define MAXN 102typedef long elem_t;using namespace std;elem_t prim(int n,elem_t mat[MAXN][MAXN]){ elem_t closeEdge[MAXN],sum=0,min;

使用宏来简化在Nordic 的sdk中添加蓝牙Service和attribute_烟斜洞庭的博客-程序员秘密

Nordic的SDK做的很好,但是他们一副生怕有什么地方做的不到位一样, 很多简单的功能代码却写的很复杂,如果是java还好,但是C语言实现起来,很多地方的代码读起来特别费劲。我在添加自己的服务的时候,没有仿照他们的示例格式去定义,而是重新处理了一下,由于复用了大量的代码,比示例程序更容易理解和阅读。 核心代码使用两个宏来定义,一个是向Service添加attri...

《深入理解Nginx》笔记之 ngx_mail相关结构体_猫和鱼爪的博客-程序员秘密

Nginx mail相关模块结构体ngx_mail_module_t      这是mail模块的抽象接口,即ngx_module_t中的ctx成员所指向的mail模块特有接口。每一个mail模块都会实现自己的ngx_mail_module_t结构体。 typedef struct { // POP3 STMP IMAP邮件模块提取出的通用接口 ngx_mail_protocol

运用@Transactional,自己抛出异常时不会回滚的原因_CODE男孩的博客-程序员秘密

问题        使用spring的配置事物注解@Transactional,在测试的时候发现不起作用。环境                配置文件[html] view plain copy bean id="studentMGDataSource" class="org.apache.commons.db

随便推点

5.14. pthreads_weixin_34014277的博客-程序员秘密

编译PHP时需要加入 --enable-maintainer-zts 选项才能安装pthreads# pecl install pthread 配置文件 cat > /srv/php-5.5.7/etc/conf.d/pthreads.ini <<EOFextension=pthreads.soEOF $ php ...

Linux初窥:Linux下SSH免密码登录配置_linux配置ssh免密登录_pengjunlee的博客-程序员秘密

目录环境设置(root权限)1.关闭防火墙和SELinux2.设置主机名3.配置hosts4.配置sshd秘钥设置1.创建免密码登录账户2.生成秘钥3.将公钥导入到认证文件4.设置文件访问权限5.将认证文件复制到其他主机假设有 A、 B 两台 Linux 服务器,我们希望能够从其中一台服务器通过 SSH 免密码登录到另一台服务器。两台服务器的信息如...

【慕课笔记】第三章 JAVA中必须了解的常用类 第1节 JAVA中的包装类_yxt_y的博客-程序员秘密

第1节 JAVA中的包装类相信各位小伙伴们对基本数据类型都非常熟悉,例如 int、float、double、boolean、char 等。基本数据类型是不具备对象的特性的,比如基本类型不能调用方法、功能简单。。。,为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。 基本类型和包装类之间的

Spring源码分析4 — spring bean创建和初始化_谢杨易的博客-程序员秘密

1 介绍创建并初始化spring容器中,refresh()方法中解析xml配置文件,注册容器后处理器,bean后处理器,初始化MessageSource,ApplicationEventMulticaster广播器,注册完ApplicationListener监听器后,关键一步就是创建和初始化其他非lazy-init的singleton beans。这样在容器初始化好的时候,这些singleton

java Spring Cloud+Spring boot+mybatis企业快速开发架构之电子商务 商城源码 分布式商城 微服务商城源码_不会写代码的女程序猿的博客-程序员秘密

涉及平台:平台管理(包含自营店面)、商家端(PC端、手机端)、买家平台(PC端、H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务)核心架构:Spring Cloud、Spring Boot、Mybatis、Redis、SFTP前端框架:VUE、Uniapp、Bootstrap/H5/CSS3、IOS、Android、小程序需要框架源码的朋友可以看我个人简介联系我。推荐分布式架构源码...

error LNK2019:和error LNK2001:_不懂还是不懂的博客-程序员秘密

错误删减了一部分,出现这个问题一直以为时头文件错误,试了没用。2>SetData.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall CNetCmd::~CNetCmd(void)" ([email protected]@[email protected]),该符号在函数 [email protected]@[email protected]@@Z$0 中被引用...

推荐文章

热门文章

相关标签