`
lizhuang
  • 浏览: 904584 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Objective-C与C语言联系的4个事实

阅读更多
事实1:实例变量存储在结构中

定义一个新类和它的实例变量时,这些实例变量实际上存放在一个结构中。这说明了可以如何处理对象,对象实际上是结构,结构中的成员是实例变量。所以继承的实例变量加上你在类中添加的变量就组成了一个结构。使用alloc分配新对象时,系统预留了足够的空间来存储这些结构。

结构中继承的成员(从根对象中获得的)之一是名为isa的保护成员,它确定对象所属的类,因为它是结构的一部分(因此,也是对象的一部分),所以由对象携带。这样,运行时系统只需要通过查看isa成员,就可以确定对象的类(即使将其赋给通用的id对象变量)。

事实2:对象变量实际上是指针

定义Fraction之类的对象变量,如

Fraction *myFract;


事实上是定义了一个名为myFract的指针变量。这个变量定义为指向Fraction类型的数据,即你的类名称。使用

myFract = [Fraction alloc];


来创建Fraction的新实例时,是在为Fraction对象的新实例分配存储内存,即存放结构的空间,然后使用结构的指针,并将指针变量myFract存储在其中。

事实3:方法是函数,而消息表达式是函数调用

方法实际上是函数。调用方法时,是在调用与接收者类相关的函数。传递给函数的参数是接收者(self)和方法的参数。所以,无论是函数还是方法,关于传递参数给函数、返回值及自动和静态变量的规则都是一样的。Objective-C编译器通过类名称和方法名称的组合为每个函数产生一个唯一名称。

事实4:id类型是通用指针类型

因为通过指针来引用对象,所以可以自由地将它们在id变量之间来回赋值。因此,返回id类型值的方法只是返回指向内存中某对象的指针。然后可以将该值赋给任何对象变量。因为无论在哪里,对象总是携带着它的isa成员,所以,即使将它存储在id类型的通用变量中,也总是可以确定它的类。
分享到:
评论

相关推荐

    禅与Objective-C

    因此,《禅与Objective-C》的作者们不得不调整写作方向,考虑到Objective-C虽然仍在使用但关注度逐渐下降的事实,最终决定将现有内容作为最终版本发布,以贡献给开源社区。 #### 社区贡献 本书免费向公众开放,...

    C语言教程-whitey主题.pdf

    C语言的命名取自BCPL的第二个字母,也是B的下一个字母。 C语言的标准与版本 随着计算机技术的发展,C语言也在不断标准化。尽管C语言的标准可能有所变化,但最广泛使用和编译器支持最好的是1999年的C99标准。最新...

    Mac OS X平台的开发系列电子书

    Objective-C:是C语言的一个超集,具有面向对象属性。因为语法与C语言差异较大,因此没有C++这么流行。Mac OS X就是由Objective-C开发而成。Objective-C是学习Mac OS X平台软件开发的第一步。 Cocoa:Cocoa是Mac OS ...

    中文版苹果object c教程

    因为本书以介绍Objective-C语言的基础知识为内容,即 关于如何使用Xcode的基础知识。通过学习前五章,你将掌握如何在非图形界面下编写基本的代码。 之后的一些章节将教给你如何在图形界面(GUI)下开发简单的程序。...

    高级Mac.OS.X编程

    - **Objective-C语言特性**:深入探讨Objective-C的基础语法、面向对象编程(OOP)特性,如封装、继承、多态等,并且解释了Objective-C如何在运行时支持动态类型和动态绑定。 - **内存管理**:重点讨论了Objective-C中...

    嵌入式gcc跨平台编译器

    它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划 的关键部分,亦是自由的 类Unix 及苹果计算机 Mac OS X 操作系统的标准...之后也变得可处理 Fortran、Pascal、Objective-C、Java,以及 Ada 与其他语言。

    gcc最新版下载

    GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器。它是一套以GPL及LGPL许可证所发布的自由软件,也...之后也变得可处理Fortran、Pascal、Objective-C、Java、Ada,以及Go与其他语言。

    Xcode开发员入门导引(简体中文版)

    因为本书以介绍Objective-C语言的基础知识为内容,即 关于如何使用Xcode的基础知识。通过学习前五章,你将掌握如何在非图形界面下编写基本的代码。 之后的一些章节将教给你如何在图形界面(GUI)下开发简单的程序。...

    cocoa 基本原理指南

    - **语言基础**:强调了Cocoa基于Objective-C这一编程语言的事实,并简述了该语言的特点及其在Cocoa中的应用。 - **技术栈**:提到了Mac OS X的技术能力和必备知识,如需要掌握C语言和熟悉Mac OS X的技术特性等。 #...

    chC语言概述实用PPT课件.pptx

    C语言的标准化始于Kernighan和Ritchie合著的《The C Programming Language》一书,这成为了C语言的事实标准,通常被称为K&R C。1989年,ANSI发布了C89/C90标准,随后国际标准化组织(ISO)在1990年推出了ISO/IEC ...

    文章笔记1

    GCC最初是作为GNU C Compiler开发的,但现在支持包括C、C++、Ada、Objective-C、Fortran和Java等多种编程语言。GCC的全称“GNU Compiler Collection”揭示了其作为一组编译器前端的事实,这些前端能够处理各种编程...

    、GCC简介GCC是GUN Compiler Collection的简称,除了编译程序之外,它还含其他相关工具,所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码

    除了上面讲的之外,GCC除了支持C语言外,还支持多种其他语言,例如C++、Ada、Java、Objective-C、FORTRAN、Pascal等。 本系列文章中,我们不仅介绍GCC的基本功能,还涉及到一些诸如优化之类的高级功能。另外,我们还...

    电子工程师也有“鄙视链”软件硬件无一幸免 硬件工程师电路分析物联网模电单片机嵌入式技术.doc

    Swift的兴起使得Objective-C开发者感到地位受到威胁,而原生应用开发者则瞧不上使用PhoneGap等混合开发工具的同行。 在前端开发领域,React.js、AngularJS和jQuery的使用者各自有他们的立场,而JavaScript原生...

    C/C++ 中gcc和g++的对比与区别

    在C/C++编程环境中,GCC(GNU Compiler Collection)是一个广泛使用的开源编译器套件,它包括了多种语言的编译器,如C、C++、Objective-C等。其中,`gcc` 和 `g++` 是两个常用的命令行工具,它们在处理C和C++源代码...

Global site tag (gtag.js) - Google Analytics