类是对象的蓝图。

一个类是描述了对象的行为和属性。例如NSString的一个实例。他的类提供了各种的方法来转化和表示他的内部字符的表示。
 
每个类的实例都包含了这个类的属性和行为。例如每个NSString类的实例都用相同的方法表示。不管他内部的字符值是多少。
 
任何特定的对象都是用来被设计用在不同的地方。你可能知道这个字符串对象表示一些字符。但是你不需要知道他的内部机制是怎么来存储字符串的。你不需要知道这个对象怎么来处理字符的,但是你必须知道怎么来和这些对象来交互。也许来请求特殊的字符或者把字符传化为大写的字符。
 
在Objective-c中接口类是其他对象和这个对象交互的一个公共的接口。
 
 
对象的可变性表示他的值是可以改变的
有一些类定义了对象是不可变的。这表示他们的内部内容必须设置当创建的时候。不能被其他的对象改变。在Objective-c所有基于NSString和NSnumber不可变对象的。如果你需要表示其他的数值。你必须创建一个新的实例。
 
有一些不可变的类提供了可变的版本。如果你需要改变他的内容在运行时。例如有一个字符串对象不可变版本的接受一个网络连接返回的字符串,你可以用NSMutableString的类。这个类的实例除了有NSString的对象行为,还提供了改变这个对象值的功能。
 
尽管NSString和NSMutableString是不同的类,他们有一些相似的地方。而不是写两个独立的类,而是巧妙利用了继承的特性。
 
类都是从其他的类继承而来的。
当一个类继承与另一个类,那么这个子类就有父类的行为和属性。他可以有机会来定义自己的新的行为和属性,或者重载父类的行为。举一个例子Objective-c的一个字符类。NSMutableString是从NSString继承而来的就像下面的表。所有在NSString提供的功能在NSMutableString里还是可以用的。例如查询特殊的字符,把新的字符变成大写的。但是NSMutableString添加自己的方法。例如可以拼接插入代替和删除一些字符。
 
根类提供了最基本的功能:
在Objective-c中有些功能是所有对象都通用的。
当Objective-c对象需要和另一个类的对象实例交互的时候。他希望另一个类提供一些基本的特性和行为。由于这个原因,Objective-c定义了一个根类让所有的类都可以继承叫做NSObject。当一个对象遇到另一个对象的时候,他希望能后用到NSObject类的一些特性。
当你定义你自己的类的时候。你可以让他继承NSObject。通常你看到cocoa 或者 cocoaTouch对象提供了你想继承的功能。
如果你想定义一个自定义的UIButton在你的app里面。例如系统给我们定义了一个UIButton类没有给我们提供足够的自定义属性来满足需求,我们可以自定义一个新类来继承UIButton。如果你继承与NSObject类那么你还需要定义之前UIButton里的一些属性方法。所以我们继承UIButton比较方面。这个UIButton继承UIControl,这个UIControl是用来描述继承的行为对所有用户界面控件在IOS。然后他又继承与UIView,这个UIView又是来把对象展示在你的屏幕上的,UIView继承于UIResponder,来响应用户的手势比如taps,getures或者震动。最后UIResponder继承NSObject。这就是UIButton的继承链。这个继承链表示你的自定义类继承UIButton将不仅仅是继承UIButton本身而且继承了每个父类的父类的功能。我们可以在头文件里看到他的继承关系。
为一个类的接口定义预期的交互:
面向对象的思想用来隐藏他的内部实现。当你定义一个标准的UIButton在IOS app。例如你不需要知道button是怎么显示到屏幕上的。你需要知道的只是你可以改变他的属性,例如他的标题和颜色。并且确保他添加到屏幕上正确的显示。当你定义自己的类的时候。你需要定义他的公有的属性和行为。哪些定义为公有的?你想让这些属性改变吗?其他的对象怎么和你的类交互?
这个接口在你的类里用来提供对象和其他的类交互的方法。公有的接口描述你的类的内部行为,至于实现是在另一个文件里面,你需要做的只是定义公有接口。
我们看一下基本的语法:
@interface myClass:NSObject
@end
这个例子定义一个myclass的类继承于NSObject。公有的属性定义在@interface和@end之间。在这个例子里,他的父类是NSObject因此他现在只有NSObject里的行为和方法。
属性控制着访问对象值的权限:
对象经常有属性来扩展公有的访问。如果你定义一个类来描述人记录他。例如你可以定义两个名字的属性。
@interface myClass:NSObject
 
@property NSString *name;
@end
在这个例子里这个myClass类定义了两个公有的属性,他们都是NSString的实例。他们都是Objective-c的对象。因此他们用*表示他们是C的指针。就像在C里面一样定义一个变量需要分号结束。
我们定义一个年龄属性@property NSNumber *yearOfBitrh;一个NSNumber对象。我们其实用这个有点大材小用了我们可以用C的基本类型int表示@property int yearsOfBirth;
属性的关键字表明了数据的方法和存储:
这个例子定义了公有属性,所以其他类对象可以读取并且可以访问这些属性的值。在一些例子中属性是不能被改变的只能是只读的。
@interface myClass:NSObject
 
@property (readonly) NSString *name;
@end
我们以后还会介绍其他的关键字。
方法定义表明这个对象可以接受消息:
在Objective-c一个对象向另一个对象发送消息是调用另一个对象的方法
C结构的方法可能是 void doSomeThing();
在Objective-c里面就是- (void)doSomeThing;这个方法没有任何返回值并且参数。这是一个实例方法用一个实例对象调用。与之相对的是类方法我们接下来会介绍。
方法是可以有参数的:
C语言的方法定义void someFunction(someType value); - (void)someMethodWithValue:(someType)value; 这个方法名字叫做someMethodWithValue: secondValue:
类的名字是唯一的,如果你新建的一个类和已经存在的类的名字重名就会出现编译错误的警告。因此在你的类的前面加上前缀是很明智的。
例如
@interface PHClass:NSObject
 
@end
你不能在同一个类里面声明两个一样的方法,但是你可以在不同类里面声明相同方法。
实现一个类提供他的内部行为:
一旦你定义了一个接口定义了公有的属性和方法你就得在实现文件里实现他的内部行为。
一个类的头文件就是.h文件他的实现文件是.m
基本语法:
#import"MyClass.h"
@implementation MyClass
@end
如果你定义了很多方法在头文件里面那么你必须实现他们。
 
@interface MyClass:NSObject
- (void)sayHello;
@end
 
#import"MyClass"
@implementation MyClass
- (void) sayHello
{
NSLog(@“hello,world”);
}
@end
这个例子用NSLog()功能将日志消息打印到控制台。和C的printf功能类似。可以有好多参数。
类也是对象,没有属性但是有方法,可以用工厂方法发送一个消息给类返回一个这个类的对象。例如:
+(id)string;
具体声明和实现和实例方法是一样的。

Objective-c官方文档翻译 类的定义的更多相关文章

  1. testNG官方文档翻译-5 测试方法,测试类和测试组

    5.1 - 测试方法 测试方法是被 @Test注解的方法.这些方法的返回值会被忽略,除非在testng.xml中将allow-return-values设置为true. <suite allow ...

  2. GreenDao官方文档翻译(上)

    笔记摘要: 上一篇博客简单介绍了SQLite和GreenDao的比较,后来说要详细介绍下GreenDao的使用,这里就贴出本人自己根据官网的文档进行翻译的文章,这里将所有的文档分成上下两部分翻译,只为 ...

  3. Spring官方文档翻译(1~6章)

    Spring官方文档翻译(1~6章) 转载至 http://blog.csdn.net/tangtong1/article/details/51326887 Spring官方文档.参考中文文档 一.S ...

  4. 基本控件文档-UITextField属性---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  5. UITableView---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址  //转载请注明出处--本文永久链接:http://www.cnblogs.com/C ...

  6. 多线程---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址(2013年12月29日更新版)   多线程  技术博客http://www.cnblo ...

  7. kong插件官方文档翻译

    kong插件官方文档翻译 目录 介绍 文件结构 编写自定义逻辑 存储配置 访问数据存储 自定义实体 缓存自定义实体 扩展Admin API 编写测试 (卸载)安装你的插件 插件开发 - 介绍 什么是插 ...

  8. Data Binding Guide——google官方文档翻译(下)

    这篇博客是Data Binding Guide官网文档翻译的下篇.假设没看过前半部分翻译的能够先看Data Binding Guide--google官方文档翻译(上)  一,数据对象 不论什么不含业 ...

  9. omnet++:官方文档翻译总结(三)

    翻译总结自:Turning it Into a Real Network - OMNeT++ Technical Articles 接官方文档翻译总结(二),本节主要是真实网络的搭建 Part 4 - ...

随机推荐

  1. 使用System.IO.Combine(string path1, string path2, string path3)四个参数的重载函数提示`System.IO.Path.Combine(string, string, string, string)' is inaccessible due to its protection level

    今天用Unity5.5.1开发提取Assets目录的模块,使用时采用System.IO.Path.Combine(string, string, string, string)函数进行路径生成 明明是 ...

  2. 利用MapReduce实现倒排索引

    这里来学习的是利用MapReduce的分布式编程模型来实现简单的倒排索引. 首先什么是倒排索引? 倒排索引是文档检索中最常用的数据结构,被广泛地应用于全文搜索引擎. 它主要是用来存储某个单词(或词组) ...

  3. Extjs Toolbar 当做弹出菜单

    menuAlign: 'tl-tr', listeners: { mouseover: function(btn) { btn.toolb.showBy(btn,btn.menuAlign); } } ...

  4. Android——菜单和进度条

    xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...

  5. nodejs系列笔记02---模块路径解析

    模块路径解析规则 参考这篇博客 我们已经知道,require函数支持斜杠(/)或盘符(C:)开头的绝对路径,也支持./开头的相对路径.但这两种路径在模块之间建立了强耦合关系,一旦某个模块文件的存放位置 ...

  6. EasyUI项目中的自定义JS

    自定义方法: (function($) { $.extend($, { //获取下标,删除时使用 getArrayIndex :  function (array,value) { var index ...

  7. 最小顶点覆盖(Minimum Vertex Cover)与最大独立集(Maximum Independent Set)

    问题描述:就是在图中找最小的点集,使得覆盖所有边. 和独立集等价:独立集问题:在图中找最大的点集,使得点集内的所有点互不相连. 引理:顶点覆盖集和独立集互补. 上面这个引理使得这两个问题可以相互规约, ...

  8. 第三百零四节,Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器

    Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器 这一节主讲url控制器 一.urls.py模块 这个模块是配置路由映射的模块,当用户访问一个 ...

  9. 巧用JS中的join方法操作字符串

    1.将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符 /** *把数组转换成特定符号分割的字符串 */ function arrayToString(arr,s ...

  10. linux -- 查看Ubuntu命令行调用的文件

    which 如: 输入:which reboot 输出:/sbin/reboot 输入:which shutdown -h now 输出:/sbin/shutdown