Coder Social home page Coder Social logo

varfunction.github.com's People

Contributors

alishutc avatar coding46 avatar danielfone avatar daz avatar djoos avatar fleeting avatar jcn avatar jkuchta avatar jogjayr avatar koomar avatar koriroys avatar kvannotten avatar lax avatar lorensr avatar lukasknuth avatar lzcabrera avatar marshallshen avatar nolith avatar oceantang avatar opie4624 avatar parnmatt avatar philips avatar pierredup avatar plusjade avatar richardlitt avatar robot-c0der avatar rsertelon avatar studiomohawk avatar vattay avatar xuhdev avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

mirelhuawei

varfunction.github.com's Issues

iOS开发者文档翻译系列

翻译一下苹果开发者的相关资源。
共9个章节。
一、类的定义
二、用对象工作
三、封装数据
四、自定义已存在类
五、用协议工作
六、值和容器
七、用块工作
八、错误处理
九、公共约定

objective-c 翻译之一

一、类的定义 原文地址

类的定义

当你开发OS X或者iOS应用时,你大部分的时间将花费在处理对象。在obj-c中,对象这个概念和其他面向对象语言很相似:对象封装了数据和相关的行为。

一个app本质上就是由很多具有相互联系的对象组成的生态系统,它们一起协同处理特定的问题,比如显示一个虚拟的界面、对用户的输入作出响应,或者存储一些信息。在OS X和ios开发中,解决问题时,其实并不需要东拼西凑的去创建各种对象,只需要掌握库的使用就会事半功倍。(Cocoa库和Cocoa Touch库,分别面向OS X和ios开发)

这些对象中,有一部分可以即插即用,比如基本的数据类型string和numbers,或者是用户界面元素:按钮、表格。你可以按你所需把它们组装在一起,构建你自己的app。

在面向对象系统中,一个对象也叫做一个类的实例。这个章节将会向你介绍,在obj-c中如何定义一个类,通过类的定义,你会指定一系列的规则,并且会由一份代码去实现你指定的规则。

类是对象的蓝图

一个类描述了它实例对象的属性和行为。比如对于一个字符串对象(它是NSString类的实例),它的类声明了很多方法去处理它所表示的字符。同样,数值也是一样。

正如同很多建筑物都出自同一个建筑结构图一样,一个类所有的对象实例,它们的行为都是相同的。比如每一个NSString的实例,无论它存储了什么内容的字符,它们的行为都是一致的。

在具体的场景中,你只需要使用你指定的对象即可,你不必去关心这些对象内部是怎么实现的。你完全没必要去弄清楚一个字符串是怎么存储在内存中,你只需要明白怎么使用这个对象,它会产生什么样符合你预期的输出,你只需弄清楚比如发送某个消息给字符串对象,让它转成大写字母后返回给你等等,如此而已。

在obj-c中,类的interface准确的定义了这个类的实例,换句话说,类的interface定义了这个类的实例对象怎么与其他对象进行通信交互。

可变性决定了被表示的值是否可以改变

有这样一些类,它定义出来的对象是不可变的。这句话的意思就是,这些对象的值必须在创建对象时就完成指定,而不能在后续程序运行的时候修改它。在obj-c中,基础的NSString和NSNumber都是不可变的,如果你需要表示另一个数值,你必须使用一个新的NSNumber实例。

有些不可变的类同样提供了可变版本。如果你需要在运行时改变对象的值,比如向一个现有的字符串里追加字符,你可以使用NSMutableString类。这个类的实例对象和NSString对象很相似,它们的区别就在于,NSMutableString提供了动态修改值的功能。

在这里,尽管NSString和NSMutableString是两个不同的类,但他们有很多相同点。所以与其写两套完全不同的实现代码,不如使用继承的特性把他们连起来。

继承其他的类

在自然界里,我们通过门纲科等分类来划分不同的生物。

比如大猩猩,人类和猩猩,他们有很多相似之处,又属于不同的生物。但追根溯源,我们把他们都归为“人科”。具体可参见下图1-1.

GitHub Logo

在面向对象的世界里,对象也和自然界的生物一样,被按照相似的法则,做出了各自的划分。子类会拥有父类的特性,就好比大猩猩拥有“人科”的特性一样。

当一个类继承了其他的类,那么它就拥有了父类的全部行为和属性,同时它也有机会去指定它自己的额外的行为和属性,甚至去覆盖它父类的行为。

举例来说,obj-c中的字符串类,NSMutableString就是继承了NSString,参考图1-2,NSString类中的所有功能,在NSMutableString中都能找到,但NSMutableString提供了一些新的方法,让你可以对原有字符串进行追加,插入,替换或者删除。

GitHub Logo

根类提供基础功能

就像所有活着的生物都有“生命”这个特性,obj-c中的所有对象也是具有共同特性的。

当一个obj-c对象需要和其他对象协同工作时,它需要其他的对象提供出一些基础的特性和行为。基于这个原因,obj-c定义了一个根类NSObject,几乎所有的类都继承于此。

当你定义你自己的类时,你至少需要继承自NSObject。一般来说,你需要查找cocoa或者cocoa touch库,找到和你需求最接近的类,然后继承它。

举例来说,在ios app中,如果UIButton类没有提供足够的能力支持你的开发,你就需要自定义一个按钮类,让它继承UIButton。在这里如果你让它继承自NSObject类,那么你就悲剧了,你不得不把UIButton的所有实现都自己重做一遍,这是在浪费时间。

UIButton类继承自UIControl类,UIControl类描述了用户界面的基础控制行为。而UIControl类又继承于UIView类,UIView类提供了显示到界面的相关功能。UIView类继承于UIResponder类,UIResponder类提供了对于用户触摸、手势、摇晃的响应支持。最终,UIResponder继承了NSObject类。具体参考1-3。

GitHub Logo

这个继承链意味着,所有的子类可以获得所有父类的能力,包括爷爷类、祖先类的能力。

你在使用任何类时,记住他的继承链是很重要的,它能让你准确知道这个类能做什么。如果你寻找的东西不在这个类里,那么它很有可能在它的父类,或者更深的父类中定义了,你可以去那里试试看。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.