Objective-C代码学习大纲(2)
本文为台湾出版的《Objective-C学习大纲》的翻译文档,系统介绍了Objective-C代码,很多名词为台湾同胞特指词汇,在学习时仔细研读才能体会。
创建classes
@interface
- Fraction.h
- #import
- @interface Fraction: NSObject {
- int numerator;
- int denominator;
- }
- -(void) print;
- -(void) setNumerator: (int) n;
- -(void) setDenominator: (int) d;
- -(int) numerator;
- -(int) denominator;
- @end
NSObject:NeXTStep Object 的缩写。因为它已经改名为 OpenStep,所以这在今天已经不是那么有意义了。
继承(inheritance)以 Class: Parent 表示,就像上面的 Fraction: NSObject。
夹在 @interface Class: Parent { .... } 中的称为 instance variables。
没有设定存取权限(protected, public, private)时,预设的存取权限为 protected。设定权限的方式将在稍后说明。
Instance methods 跟在成员变数(即 instance variables)后。格式为:scope (returnType) methodName: (parameter1Type) parameter1Name;
scope 有class 或 instance 两种。instance methods 以 - 开头,class level methods 以 + 开头。
Interface 以一个 @end 作为结束。
@implementation
- Fraction.m
- #import "Fraction.h"
- #import
- @implementation Fraction
- -(void) print {
- printf( "%i/%i", numerator, denominator );
- }
- -(void) setNumerator: (int) n {
- nnumerator = n;
- }
- -(void) setDenominator: (int) d {
- ddenominator = d;
- }
- -(int) denominator {
- return denominator;
- }
- -(int) numerator {
- return numerator;
- }
- @end
Implementation 以 @implementation ClassName 开始,以 @end 结束。
Implement 定义好的 methods 的方式,跟在 interface 中宣告时很近似。
把它们凑在一起
- main.m
- #import
- #import "Fraction.h"
- int main( int argc, const char *argv[] ) {
- // create a new instance
- Fraction *frac = [[Fraction alloc] init];
- // set the values
- [frac setNumerator: 1];
- [frac setDenominator: 3];
- // print it
- printf( "The fraction is: " );
- [frac print];
- printf( "\n" );
- // free memory
- [frac release];
- return 0;
- }
output
- The fraction is: 1/3
- Fraction *frac = [[Fraction alloc] init];
这行程式码中有很多重要的东西。
在 Objective-C 中唿叫 methods 的方法是 [object method],就像 C++ 的 object->method()。
Objective-C 没有 value 型别。所以没有像 C++ 的 Fraction frac; frac.print(); 这类的东西。在 Objective-C 中完全使用指标来处理物件。
这行程式码实际上做了两件事: [Fraction alloc] 唿叫了 Fraction class 的 alloc method。这就像 malloc 记忆体,这个动作也做了一样的事情。
[object init] 是一个建构子(constructor)唿叫,负责初始化物件中的所有变数。它唿叫了 [Fraction alloc] 传回的 instance 上的 init method。这个动作非常普遍,所以通常以一行程式完成:Object *var = [[Object alloc] init];
[frac setNumerator: 1] 非常简单。它唿叫了 frac 上的 setNumerator method 并传入 1 为参数。
如同每个 C 的变体,Objective-C 也有一个用以释放记忆体的方式: release。它继承自 NSObject,这个 method 在之后会有详尽的解说。
Objective-C代码学习大纲(2)的更多相关文章
- Objective-C代码学习大纲(3)
Objective-C代码学习大纲(3) 2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍 ...
- Objective-C代码学习大纲(6)
2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...
- Objective-C代码学习大纲(5)
2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...
- Objective-C代码学习大纲(4)
2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...
- Objective-C代码学习大纲(1)
2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...
- 大数据Python学习大纲
最近公司在写一个课程<大数据运维实训课>,分为4个部分,linux实训课.Python开发.hadoop基础知识和项目实战.这门课程主要针对刚从学校毕业的学生去应聘时不会像一个小白菜一样被 ...
- JVM学习——学习方法论&学习大纲
2020年02月06日22:25:51 完成了Springboot系列的学习和Kafka的学习,接下来进入JVM的学习阶段 深入理解JVM 学习方法论 如何去学习一门课程--方法论 多讨论,从别人身上 ...
- u-boot代码学习内容
前言 u-boot代码庞大,不可能全部细读,只能有选择的读部分代码.在读代码之前,根据韦东山教材,关于代码学习内容和深度做以下预先划定. 一.Makefile.mkconfig.config.mk等 ...
- Linux 系统从入门到精通的学习大纲;
以前没有接触过Linux,生产环境需要,有时候遇到问题,百度一下,问题解决了,在遇到问题,在百度,有时候问题是如何解决的,为什么会解决有点丈二的和尚摸不着头脑, 为此,想用一段时间,系统的学习下Lin ...
随机推荐
- keil写STM32程序出现literal treated as "long long"
在Keil MDKARM中 unsigned int value2=0x80000000; unsigned int value4=2147483648; value2编译时不产生警告,而value4 ...
- LDO和BUCK降压稳压器对比
LDO和BUCK降压稳压器对比 在采用MCU/DSP/FPGA设计的控制系统中,低压输入级(一般在12V以下),输出5V/3.3V/1.8V/1.5V/1.2V的电路中,常用的电源芯片是BUCK(降压 ...
- vsftpd被动模式配置
1.vsftp配置 参考文章http://linux008.blog.51cto.com/2837805/6105992.设置vsftpd.conf开启被动模式参数 #vim pasv ...
- 【LeetCode】Permutations II 解题报告
[题目] Given a collection of numbers that might contain duplicates, return all possible unique permuta ...
- 【C语言】21-结构体
C语言的核心部分都说得七七八八了,相信大家已经对C语言的基本数据类型(char\int\float).数组.指针都很熟悉了,今天来学习C语言中另外一种数据类型:结构体.在iOS开发中,结构体是经常用到 ...
- Android——Bundle savedInstanceState的作用
写过Android程序的都知道Activity中有一个名称叫onCreate的方法.该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始.可是有一点容易被忽视,就是onCr ...
- core2.1独立布署,报错的原因。
除了所有的.dll和exe 还有一个特别重要的文件.deps.json,
- GUI 即人机交互图形化用户界面设计
GUI 即人机交互图形化用户界面设计.纵观国际相关产业在图形化用户界面设计方面的发展现状,许多国际知名公司早已意识到 GUI 在产品方面产生的强大增值功能,以及带动的巨大市场价值,因此在公司内部设立了 ...
- c/c++学习之c++ 中的list <>容器
http://blog.csdn.net/mazidao2008/article/details/4802617 push 实例化 即添加 http://www.cnblogs.com/BeyondA ...
- XAMPP phpmyadmin修改mysql密码
我手动修改了mysql的root账户的密码,然后就访问不了phpmyadmin了. 解决方法: 打开xampp目录(默认的安装目录,如果修改,请找到xampp的安装目录),打开phpmyadmin的目 ...
