类是对象的蓝图。

一个类是描述了对象的行为和属性。例如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. 【C#/WPF】限制GridSplitter分隔栏的滑动范围

    GridSplitter可以自由滑动,例如一个水平方向的分隔栏,可以从屏幕顶端滑到屏幕底端. 现在的需求是:限制GridSplitter在一定范围内滑动. 例如,现在有如下的横竖两个GridSplit ...

  2. C语言 · 数字三角形

    算法训练 数字三角形   时间限制:1.0s   内存限制:256.0MB      问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字 ...

  3. 百兆千兆网口100Base-TX/1000Base-T

    100Base-TX快速以太网目前制定的三种有关传输介质的标准之一. 另外两种是100Base-T4,100Base-FX. 100标识传输速率为100Mbit/s. base标识采用基带传输. T代 ...

  4. Java实现 简单聊天软件

    简单的聊天软件 //客户端 package yjd9; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ...

  5. libRTMP文档

    https://rtmpdump.mplayerhq.hu/ 原文地址:http://rtmpdump.mplayerhq.hu/librtmp.3.html git clone git://git. ...

  6. js彈出層或者js彈出引用url Frame 層

    function Popup() { var _this = this; this.CssName = "layermask";//樣式 //遮蓋層 this.hiddLayer ...

  7. SQL SERVER 2005快捷键

    一.SQL SERVER 2005快捷键 快捷键 功能 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O打开项目 ...

  8. Qt 事件过滤器

    Qt创建了QEvent事件对象之后,会调用QObject的event()函数做事件的分发.有时候,你可能需要在调用event()函数之前做一些另外的操作,比如,对话框上某些组件可能并不需要响应回车按下 ...

  9. 关于Cocos2d-x中数组的使用

    1.定义和背景 cocos2d::Vector<T> 是一个封装了动态大小的数组的顺序型容器. 它的元素是连续存储的,cocos2d::Vector<T> 的存储是自动处理的. ...

  10. 第三百一十六节,Django框架,中间件

    第三百一十六节,Django框架,中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间 ...