ios 语法基础

一、Objective-C与C的渊源

      Objective-C诞生于 20 世纪 80 年代,由Brad Cox 发明,意在将流行的、可移植的 C 语言与优雅的 Smalltalk 语言结合在一起。Objective-C 是 C 语言的一个扩展集,它以 C 语言为基础,在语言中添加了一些微妙但意义重大的特性。

      苹果公司的iphone平台采用Objective-C做为native language的开发,Objective-C的内核是C语言的,并基于C语言实现OOP的一些特性。Objective-C是对C语言的扩展,这和C++的前身Better-c有很大的相似之处,Objective-C的新版本里实现了和Java类似的垃圾回收机制,但基于iphone平台的资源限制,iphone平台并不支持垃圾回收机制。

 

二、初识Objective-C

      1、Cocoa的组成

      苹果公司将Cocoa、Carbon、QuickTime和OpenGL等技术作为框架集提供Cocoa组成部分有:(1)Foundation框架(有很多有用的,面向数据的低级类和数据结构);(2)Application Kit(也称AppKit)框架(包含了所有的用户接口对象和高级类,例如NS……),还有一个支持框架的套件,包括Core Animation和Core Image。

     2、NSLog相当于printf()

     NSLog(@"hello Objective-C");

    //注:@是Objective-C在标准C语言基础上添加的特征之一,双引号的字符串前面有一个@,这表示引用的字符串应该作为Cocoa的NSString元素处理

    NSLog(@"are %d and %d different? %@",5,5,boolString(areTheyDifferent));

    //注意%@:使用NSLog输出任何对象值时,都会使用这个格式说明

    3、BOOL使用8位存储,YES定义为1,NO定义为0,大于1不为YES,跟标准C不同。

    若不小心将一个长于1字节的整型值赋给BOOL,则只截取低八位

    Obejective-C中1不等于1,绝对不要将BOOL值和YES比较

 

三、怪异的Objective-C语法结构

   我这里之所以说它的怪异,是相对于习惯其它编程语言(JAVA,C++等语言),下面把它最常见的特色简单说明:

   1、减号(或者加号)

   我们每天都会在IOS开发中见到在方法名前“+”或“─”号,那么这些是什么,怎么这么奇怪?

首先要把以前学习面向对象语言的惯性思维抛去,在Objective-C里面没有public和private的概念,你可以认为全是public;它只有类方法和实例方法,加号表示类方法,类方法可以直接调用,而不用创建这个类的实例;减号表示实例方法,需要创建这个类的实例对象才可以调用。

 

比如c#/java中,一个方法的写法可能是:

private void hello(bool ishello)

{

//OOXX

}

 

用Objective-C写出来就是

-(void) hello:(BOOL)ishello

{

//OOXX

}

    有过编程经验的人,理解这些应该不难!

 

    2、中括号

    中括号可以认为是如何调用你刚才写的这个方法,通常在Objective-C里说“消息”。

 比如C#里你可以这么写:

 this.hello(true);

 

在Objective-C里,就要写成: 

[self hello:YES];

 

 

 

   3、NS****

   在IOS开发中,经常会遇到NS开头的对象,这个要从乔帮主历史恩怨说起。当年Steve Jobs 和John Scullery与恩怨,乔帮主当年被人挤兑出苹果,自立门户的时候做了个公司叫做NextStep,里面这一整套开发包很是让一些科学家们喜欢,而现在Mac OS用的就是NextStep这一套函数库。

   这些开发NextStep的人们比较自恋地把函数库里面所有的类都用NextStep的缩写打头命名,也就是NS****了。比较常见的比如:

 

NSLog

NSString

NSInteger

NSURL

NSImage

   你会经常看到一些教学里面会用到:

NSLog (@"%d",myInt);

   这句话主要是在console里面跟踪使用,你会在console里面看到myInt的值(在XCode里面运行的时候打开dbg窗口即可看到)。

你还可以看到其他名字打头的一些类,比如CF、CA、CG、UI等等,比如

CFStringTokenizer 这是个分词的东东

CALayer 这表示Core Animation的层

CGPoint 这表示一个点

UIImage 这表示iPhone里面的图片

 

CF说的是Core Foundation,CA说的是Core Animation,CG说的是Core Graphics,UI说的是iPhone的User Interface……还有很多别的,等你自己去发掘了。

 

四、Objective-C常见语法说明

 

 

   1 头文件引用使用 #import “文件名”或者 #import <文件名>的形式以确保每个头文件仅被包含一次;

 

   2 类声明以 @interface 类名:继承类 开头,以 @end 结尾,类实现以@implementation 类名 开头,以 @end 结尾;

   3 实例方法,即成员方法,在方法名前面添加一个减号(-);类方法,在方法名前面添加一个加号(+);

   4 类方法的调用格式为 [类名 类方法],成员方法调用格式为 [实例名 实例方 法],这种模式在ObjC中被称为消息机制,[对象 消息]即给对象发送了一个消息,产生的 效果就是该对象调用了该类中定义的对应的实例方法;

   5 下面以一个简单的例子来说明上述语法:

 

Print类.h文件(声明文件)

 

 

#import <Foundation/Foundation.h>

 

@interface Print : NSObject { //Objective-c的所有类都继承于NSObject

    // 成员属性

    NSString *caption;

    NSString *photographer;

}

//在Objective-C 2.0引入了属性合成,相当于之前的get/set方法

@property (nonatomic, copy) NSString *caption;

@property (nonatomic, copy) NSString *photographer;

 

// 类方法

+ (NSString*)printName;

@end

 

 

 

Print类.m文件(实现文件)

 

#import "Print.h"

 

@implementation Print

@synthesize photographer;

@synthesize caption;

 

// 类方法

+ (NSString*)printName

{

    return (@"Print Result");

}

 

@end

 

 

 

Print 类使用

 

#import "Print.h"

 

int main(int argc, const char *argv[])

{

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    return NSApplicationMain(argc, (const char **)argv);

    // 类方法调用

    NSLog(@"ClassName = /"%@/"", [Print printName]);

 

    // 初始化

    Print* p = [[Print alloc] init];

    // 设置器调用

    [p setCaption:@"MyCaption"];

    [p setPhotographer:@"MyPhotographer"];

 

    // 获取器调用

    NSLog(@"Caption = /"%@/"", [p caption]);

    NSLog(@"Photographer = /"%@/"", [p photographer]);

    [pool drain];

 

    return 0;

}

 

 

 

运行这段代码,结果如下:

 

2011-05-31 11:12:13.715 demo[1471:903] ClassName = "Print Result"

2011-05-31 11:12:13.718 demo[1471:903] Caption = "MyCaption"

2011-05-31 11:12:13.718 demo[1471:903] Photographer = "MyPhotographer"

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值