`

[obj-c]objective-c 之歌 最简单最快速的objective-c教程

阅读更多
objective-c 之歌 最简单最快速的objective-c教程
http://iammr.7.blog.163.com/blog/static/4910269920093914452407/
C没有类
这让人很疲惫
对象的说法很时髦
不就是继承封装组合人人会
右走是C++,这个大众都熟悉它
左走就是objective-c,躲在僻静僻静的麦金塔
本是同根生的C
如何高举面向对象的大旗
求同存异标新立异且听一一细分清

对象的C
是不同的C
类的处理与众不同重点要区分

不重复是我的口头禅
任何时候我只说一次告诉你我的地盘
    [@begincommand] | @end就是我的指示
        @interface classname  声明类
        @implementation classname  实现类
        @protocol interfacename  声明接口
就是这么简单,你的一定要明白

我先声明对成员变量和方法的关系有远近
    成员变量大大括在我的怀
        关系远近 public / protected / private 来区分
        若不声明全默默受着保护
        静态成员变量请不要放在此
    成员方法我不太爱
        前面拴着绳子置于类的变量列表外
            减号就是普通函数
            加号就是静态函数莫怪
        函数的声明有点怪
            我要一眼叫出名,包括函数名和参数名
            其余的类型括起来,我有空再来慢慢看
            函数名和参数名之间用:分隔开
        多个参数的函数那就是更怪
            逗号其实不是我的爱
            后续的每个参数分隔用空白
            每个参数形式如 标签:(参数类型)参数名 
            其实只要把函数名看作是第一个参数标签
            你就能领悟其中的奥妙并在调用时喜爱
        成员方法太多我才懒得区分亲疏远近
            它们一律都是公之于众要好好的干活
            谁若不服胆敢出头犯上
            就踢出头文件打入冷宫永世不能露面试试看
        所有的成员方法都是虚函数
            改则重载,不改就继承
            不用任何标记请放心大胆随便使用

对象的类,在继承层次上考虑才显得重要
    所有的类最终都继承于NSObject
        因为它给你创建自己生命的方法

    不继承于NSObject的只能是接口protocol
        它没有成员变量只有方法
        它只有声明不用实现
        这点和java很相似

当然类还有一些绝活可以让你开开眼
    可以动态的扩充一个类 而不总是用继承
        @interface CClassA(Category)|@end
        @implementation CClassA (Category)|@end
        源代码外包含该 类的头文件
        就可以使用该Category中的方法
    
也可以动态的替换一个类
    但是只限于用继承类来替换基类功能
        [CInheritClass poseAsClass: [CBaseClass class]];
    声明之后用基类创建的对象实际上行为都是继承类

所以一个类的完整声明如下:
    @interface CClassA(Category): CBaseClass<IA,IB...>
    类别,基类,接口一一具全
    加上静态 虚函数 
    所有特性和C++均可对应
    再加上所独有的特性
    这一特性编译类语言很少有
    设计得当完全可以实现动态调用dll切换功能

类的定义和使用,也有点怪
    想想看一个对象的生命周期,该是如何办
        创建很是别扭
            这样就定义了一个类对象,
            CClassName* pA = [[CClassName alloc] init];
            能且只能返回对象指针
    释放分为两种
        自动释放声明后 [pA autorelease]; 以后可以不管
        否则就必须配对 [pA release];
    注意类的构造函数init可以捕获
    但是析构函数却没有这点很让人意外
 
    使用类也有多种情况
        调用成员方法用中括号     int nRtn = [pA method:param1];
        而静态成员方法不需要对象 int nRtn = [CClassName method];
        调用成员变量还是C格式    pA->m_nCount = 1;

    所有的类,都可以对应一个id类型
        用来引用一个对象                 id     cur = sq;
        或者用来引用一个对象指定的接口 id<IA> cur = sq;
        然后就可以调用该对象的方法和指定接口方法
分享到:
评论

相关推荐

    Object-C语言教程&

    ### Objective-C语言教程知识点 #### 一、Objective-C简介 - **定义与特点**:Objective-C是一种计算机语言,它的设计初衷是为了支持面向对象编程。它不仅保持了C语言的简洁性,还通过引入面向对象的概念进一步提升...

    From C++ to Objective-C.pdf

    - **熟悉C语言**: 由于Objective-C是C语言的扩展,具备C语言基础对于学习Objective-C非常有帮助。 - **实践为主**: 通过实际编写代码来学习Objective-C是最好的方法。尝试使用Objective-C和Cocoa框架开发简单的应用...

    Objective-C培训资料

    以下是一个简单的 Objective-C 程序示例,用于展示程序的基本结构。 ```objective-c #import int main(int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog...

    objective-c的四种遍历方法

    Objective-C 是苹果公司开发的面向对象的编程语言,主要用于 macOS 和 iOS 平台的应用开发。在 Objective-C 中,遍历是处理数组、集合或者字典等数据结构时常见的操作。这里我们将详细介绍四种主要的遍历方法:for ...

    Objective-C内存管理教程和原理剖析

    Objective-C的内存管理机制是基于手动管理的,与.NET和Java的自动垃圾回收机制不同。在Objective-C中,对象在堆上创建,并需要一个指针来保持对其的引用。例如,`ClassA *obj1 = [[ClassA alloc] init];` 这句代码...

    MKPolygon-GPC:将多边形布尔运算符添加到MKPolygon的Obj-C类别

    GPC的最简单方法是使用CocoaPods: 将Pod添加到podfile pod 'MKPolygon-GPC', '~&gt; 0.0.1'刷新您的项目Pod pod install手动地如果您不使用cocoapods,只需在XCode项目中添加MKPolygon+GPC.h , MKPolygon+GPC.m , ...

    ios中文开发

    Objective-C是一种面向对象的编程语言,它是苹果公司在开发iOS和macOS应用程序时的主要语言之一。Objective-C结合了C语言的基础语法与Smalltalk的面向对象特性,使得开发者能够更加高效地构建复杂的软件系统。本文将...

    \线性规划 C语言\线性规划 C语言

    在C语言项目中,我们可以使用AMPL作为建模工具,通过AMPL的C库与C代码交互。 例如,你可以用AMPL这样描述一个简单的线性规划问题: ```ampl param c {1..n}; param A {1..m, 1..n}; param b {1..m}; var x {1..n}...

    iPhone_Development.pdf

    Objective-C是一种面向对象的编程语言,它建立在C语言的基础之上,并添加了许多现代面向对象的语言特性,如动态消息发送、运行时支持等。Objective-C中的类与对象定义如下: ```objective-c @interface ClassName :...

    oc数组排序

    在编程领域,数组和排序是两个非常基础但至关重要的概念,尤其在Objective-C(简称OC)这样的面向对象语言中。数组是一种数据结构,用于存储一组相同类型的数据元素,而排序则是对这些元素按照特定规则进行排列的...

    网讯iOS笔试题

    题目提到的`dealloc`方法是Objective-C中用于释放对象占用的内存的方法。在以下示例中: ```objective-c ClassA* obj1 = [[ClassA alloc] init]; ClassA* obj2 = obj1; [obj1 hello]; [obj1 dealloc]; [obj2 hello]...

    CppAndroidIosExample:一个在Android项目和iPhone项目上使用相同C ++代码的应用程序示例

    最高级别是常规的Obj-C / Java / Kotlin代码,此处没有消息,最困难的部分是中间层。 iOS的中间层很简单; 您只需要配置项目就可以使用Obj-c的一个不同版本(称为进行构建,仅此而已,您就可以访问C ++代码。 在...

    linux-Vi及gcc的使用方法

    Vi编辑器和GCC编译器是Linux系统中不可或缺的工具,前者用于编写和编辑源代码,后者用于编译和构建C/C++以及Objective-C程序。 ### Vi编辑器的使用方法 Vi编辑器是Linux中最常用的文本编辑器之一,它分为三种模式...

    史上最全的iOS面试题及答案

    - **未释放的对象**:忘记释放已经不再使用的对象是最常见的内存泄漏原因之一。 - **循环引用**:如上所述,两个或多个对象之间形成循环引用也会导致内存泄漏。 - **全局变量**:如果全局变量持有对象的强引用,而...

    GCC使用教程

    GCC支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada以及Go等。在Linux系统中,GCC是开发者的首选编译器,它不仅适用于个人电脑,还广泛应用于嵌入式系统和服务器。 ### GCC的基本工作流程 GCC的工作流程...

    gcc6.3.0离线安装所需的依赖文件

    GCC(GNU Compiler Collection)是GNU项目的一个核心组件,它是一套开源的编译器集合,支持C、C++、Objective-C、Fortran、Ada、Go等多种编程语言。在Linux环境中,GCC是开发软件的重要工具,尤其对于CentOS这样的...

    IOS_5_programming_cookbook

    Objective-C中的for循环是最基本的形式之一,可以用来遍历数组或执行重复操作。 #### 1.10 实现while循环 与for循环类似,while循环也是重复执行代码的一种方式,但它的条件判断发生在每次循环开始之前。这种方式...

    XDMicroJSBridge

    用于Obj-C和JavaScript之间通信的最简单的iOS桥梁 例子 要运行示例项目,请克隆存储库,然后首先从Example目录运行pod install 。 安装 XDMicroJSBridge可通过。 要安装它,只需将以下行添加到您的Podfile中: pod...

    Makefile.pdf

    GCC 支持多种编程语言,包括 C、C++、Objective-C、Fortran、Ada 等。 当使用 Makefile 结合 GCC 时,可以通过定义变量来控制编译器选项,比如优化级别 (`-O2`)、警告级别 (`-Wall`) 等。此外,还可以利用 GCC 提供...

Global site tag (gtag.js) - Google Analytics