Object-C基础学习笔记(1)

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

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



2、NSLog() 相当于 print()
NSLog(@"hello Object-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比较



4、Object-C语法结构:

在Objective-C里面没有public和private的概念,你可以认为全是public;
它只有类方法和实例方法,加号(+)表示类方法,类方法可以直接调用,而不用创建这个类的实例;
减号(-)表示实例方法,需要创建这个类的实例对象才可以调用。
如:(Object-C)
-(void)hello:(BOOL)ishello
{
//XXOO
}
(C#/Java)
private void Hello(bool ishello)
{
//XXOO
}

如何调用刚才写的方法(Object-C中说消息)
(Object-C)
[self hello:Yes];
(C#)
this.hello(true);



5、比较常见的函数库:
NSLog、NSString、NSInteger、NSURL、NSImage

还可以看到其他名字打头的一些类,比如CF、CA、CG、UI等等
CF说的是Core Foundation,CA说的是Core Animation,CG说的是Core Graphics,UI说的是iPhone的User Interface



6、Object-C常见语法说明:
1 头文件引用使用 #import “文件名”或者 #import <文件名>的形式以确保每个头文件仅被包含一次;
2 类声明以 @interface 类名:继承类 开头,以 @end 结尾,类实现以@implementation 类名 开头,以 @end 结尾;
3 实例方法,即成员方法,在方法名前面添加一个减号(-);类方法,在方法名前面添加一个加号(+);
4 类方法的调用格式为 [类名 类方法],成员方法调用格式为 [实例名 实例方 法],这种模式在ObjC中被称为消息机制,
[对象 消息]即给对象发送了一个消息,产生的 效果就是该对象调用了该类中定义的对应的实例方法;

如:(Object-C)

Print类.h文件(声明文件)
++++++++++++++++++++++++++++++
#import <Foundation/Foundation.h>

@interface Print:NSObject{//Object-C的所有类都继承于NSObject
//成员属性
NSString *caption;
NSString *photographer;
}

//在Object-C2.0引入了属性合成,相当于C#中的get/set方法
@property(nonatomic,copy)NSString *caption;
@property(nonatomic,copy)NSString *photographer;

//类方法
+(NSString*)printName;

@end

Print类.m文件(实现文件)
++++++++++++++++++++++++++++++
@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]"];

[pool drain];

return 0;
}

运行结果:
2015-05-2 11:12:13.715 demo[1471:903] ClassName = "Print Result"

2015-05-2 11:12:13.718 demo[1471:903] Caption = "MyCaption"

2015-05-2 11:12:13.718 demo[1471:903] Photographer = "MyPhotographer

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



总结:
1、Object-C方法调用(Calling Methods):
[object method];
[object methodWithinput:input];
2、对象方法的返回值
output=[object methodWithOutput];
output=[object methodWithinputAndOutput:input];
3、创建对象
id myObject=[NSString string];
//id指的是任意类型,为指针。这里即可:
NSString* myString=[NSString string];
//所有的Object-对象变量都是指针类型
4、嵌套消息调用(Nested Messages)
如:function1(function2());
(Object-C)
[NSString stringWithFormat:[prefs format]];
//避免一行代码里嵌套调用超过两个
5、多参数输入的方法(Multi-Input Methods)
定义一个多输入参数的方法:
-(BOOL)writeToFile:(NSString*)path atomically:(BOOL)userAuciliaryFile;
调用该方法:
BOOL result=[myData writeToFile:@"tmp/log.txt" atomically:NO];
//参数不一定要给它命名,在运行期,系统的这个方法的真实名字叫writeToFile:atomically:
6、Accessors(Getter&Setter)--访问器
//在Objective-C里面所有的实例对象默认都是私有的。
//所有在大多数情况下我们需要用accessors去读取或者设置变量的值。
//设置对象变量的值有以下两种方式:
[photo setCaption:@"Day at the Beach"];
output =[photo caption];//该代码并非直接去读对象实例的变量,实际上它调用的是名为caption的方法。
方括号:都是向一个对象或者一个类发送一个消息
7、Dot Syntax (.语法)
//在Object-c2.0里,新增了一个"."操作,在Mac OS X 10.5里使用了Object-C2.0语法
[email protected]"Day at the Beach";
output=photo.caption;
//注:这两种方式都可以使用,但在一个工程里最好保持风格一致,只使用某一种。
8、创建对象
主要有两种方式创建对象
第一种:NSString* myString=[NSString string];
//注:习惯的风格,在这种情况下,我们创建的是系统自动释放的(autoreleased)类型的对象。
第二种:NSString* myString=[[NSString alloc]init];
//注:这是嵌套的方法调用。第一个调用的NSString的自己的alloc方法。
//较为底层的调用,创建了内容、以及实例化了一个对象。
//我们在这里可以用不同的初始化方式去赋初值
NSNumber* value=[[NSNumber alloc]initWithFloat:1.0];
9、基本内存管理
//假如我们正在为Mac OS X开发一个应用程序,我们可以选择是否启用垃圾回收机制。
//这就意味着我们不需要去考虑内存管理,除了一个特别复杂的情形我们需要处理一下。
//然而,我们有的时候我们的开发环境没有垃圾回收机制,比如iPhone开发的时候就没有垃圾回收机制。
//在这种情况下,我们就需要了解一些基本的内存管理方面的概念。
//假如我们手动的通过alloc创建了一个对象,我们需要用完这个对象后release它。
//我们不需要手动的去release一个autoreleased类型的对象,假如真的这样去做的话,我们的应用程序将会crash。
//string1 will be released automatically
NSString* string1 =[NSString string];
//must release this when done
NSString* string2=[[NSString alloc]init];
[string2 release];
//现在暂且认为凡是autoreleased的对象在调用完成后就会被释放,以后还需进一步的完善

10、设计类
//对于Object-C语言而言,创建一个类非常简单,它分为两个部分
//类的接口通常保存在ClassName.h文件里,它定义了实例的参数,以及一些公开的方法。
//类的实现在ClassName.m文件里。它包含了真正运行的代码和那些方法。
//它还经常定义一些私有的方法。这些私有的方法对于子类是不可见的。

如:有个类名为Photo的接口文件:Photo.h 代码如下:
#import

@interface Photo:NSObject{//声明Photo类,继承自NSObject类
//定义成员变量,这里是NSStrig*类型,也可以为任意类型id类型
NSString* caption;
NSString* photographer;
}
//增加方法,Object-C方法不需要加get前缀。
//Getters,返回类型为NSString*类型
-(NSString*) caption;
-(NSString*) photographer;
//Setters,返回类型指定为void类型
-(void)setCaption:(NSString*)input;
-(void)setPhotographer:(NSString*)input;

@end

Photo类的实现,代码如下:
#import "Photo.h"
//getters 实现
@implementation Photo
-(NSString*)caption{
return caption;
}

-(NSString*)photographer{
return photographer;
}

//setters
-(void) setCaption:(NSString*)input{
[caption autorelease];
caption=[input retain];
}

-(void) setPhotographer:(NSString*)input{
[photographer autorelease];
caption=[input retain];
}
//在支持垃圾回收的环境里,我们可以直接赋值就可以了
//如:
//-(void) setCaption:(NSString*)input{
// caption=input;
//}
@end



Object-C基础学习笔记(1)

时间: 2024-11-12 05:58:21

Object-C基础学习笔记(1)的相关文章

ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习

首页 头条 文章 频道                         设计频道 Web前端 Python开发 Java技术 Android应用 iOS应用 资源 小组 相亲 频道 首页 头条 文章 小组 相亲 资源 设计 前端 Python Java 安卓 iOS 登录 注册 首页 最新文章 经典回顾 开发 Web前端 Python Android iOS Java C/C++ PHP .NET Ruby Go 设计 UI设计 网页设计 交互设计 用户体验 设计教程 设计职场 极客 IT技术

ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习

一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASPX引擎或者第三方的NVelocity模板引擎. Razor在减少代码冗余.增强代码可读性和Visual Studio智能感知方面,都有着突出的优势.Razor一经推出就深受广大ASP.Net开发者的喜爱. 1.2 Razor的语法 (1)Razor文件类型:Razor支持两种文件类型,分

linux基础学习笔记——操作大全

作者:liaoyi 更新时间:2014-6-2 ****************基本操作***************** 关机 shutdown -h now    root用户               init 0              root用户halt      root+一般用户poweroff 重启shutdown -r now    root用户init6     root用户reboot            root+一般用户 注意:1.shutdown 比较灵活,可

js基础学习笔记(三)

3.1 认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码: 将HTML代码分解为DOM节点层次图: HTML文档可以说由节点构成的集合,三种常见的DOM节点: 1. 元素节点:上图中<html>.<body>.<p>等都是元素节点,即标签. 2. 文本节点:向用户展示的内容,如<li>...</li&g

QT基础学习笔记

Qt简介:1991, 挪威奇趣科技Trolltech开发的跨平台c++图形用户界面(GUI)应用程序开发.2008,被诺基亚收购2012,转让给芬兰的Digia公司. 商业版:专业版,企业版: // 开源版(GNU) 优势:1.跨平台 2.面向对象 3.丰富API 类库  4.可视化编程 5,时间驱动机制 JAVA--compile once, run anywhere    一次编译,到处运行Qt-- wrire once ,comile anywhere     一次编写,到处编译 桌面操作

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.

HTML&CSS基础学习笔记13—无序列表

无序列表 有时我们的工作繁忙,杂事很多,怕忘记,就会把事情一件件列出来,防止忘记. 它们的排列顺序对于我们来说并不重要,可以随意调换,我们将它称为无序列表,HTML里用<ul>标签来表示无序列表,列表里的项目则用<li>标签来表示: 1 2 3 4 5 <ul>     <li></li>     <li></li>     ... </ul> 看一段实例代码: 对于的浏览器显示结果是这样的: 更多内容学习,请

JAVA基础学习笔记(2)

看了几天的视频了,都没时间来写下学习笔记,今天来写下第二次的学习笔记,前几天看的给忘记了,就写最新看到的吧 主要内容:1.类的变量与函数(方法) 2.对象的存储方式 3.新建一个对象及对象的赋值与调用 4.空对象 5.匿名对象 1.类的变量与函数(方法) class Dog      //类名 { String name;  //变量的声明 int age; String color; void bark()   //方法的定义(返回值为空,不带参数) { System.out.println(

JAVA基础学习笔记(1)

今天第一天开始学JAVA,时间:2014年6月17日 学习内容:1.java环境的架设 2.JAVA基本数据类型 1.JAVA环境的架设       1.要先去下载JDK,下载地址 2.安装完成后,设置环境变量 1.1环境变量的设置        1.右键-我的电脑-属性-高级-环境变量-系统变量,找到PATH,在里面加入jdk里bin目录的地址 如:c:\java\bin; 2.新建-名为classpath,值为. 1.2测试JAVA是否配置正确        1.在cmd里面输入javac.