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语法
photo.caption=@"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)的更多相关文章

  1. C#RabbitMQ基础学习笔记

    RabbitMQ基础学习笔记(C#代码示例) 一.定义: MQ是MessageQueue,消息队列的简称(是流行的开源消息队列系统,利用erlang语言开发).MQ是一种应用程序对应用程序的通信方法. ...

  2. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  3. Maven基础学习笔记

    Maven基础学习笔记 下载链接 官网:https://maven.apache.org/ 所有版本:https://archive.apache.org/dist/maven/maven-3/ 阿里 ...

  4. 【C#编程基础学习笔记】4---Convert类型转换

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...

  5. 【C#编程基础学习笔记】6---变量的命名

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...

  6. 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)

    技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...

  7. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  8. Mysql数据库基础学习笔记

    Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...

  9. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  10. Java基础学习笔记(一)

    Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...

随机推荐

  1. 解决 DCEF3 在 BeforePopup 事件中打开新窗体的问题

    此问题的解决方案从 https://groups.google.com/forum/#!topic/delphichromiumembedded/xzshOr-pjnU 获得. procedure T ...

  2. 发现一个不错的十六进制编辑器-HxD

    十六进制编辑器我觉得是个必需的工具,遥想当年用文曲星的时候,Pacmanager.Ewayeditor…… 之前都在用WinHex,好用,但是是个收费软件,老用着破解版心里还是不舒服 后来发现这个名叫 ...

  3. C++,C#,Python

    1.C++的思路:无论是基本类型,还是类类型,对象的传递提供了两种方式,一个是整体拷贝,一个是复制引用.整体拷贝对应着copy构造和copy赋值,复制引用就是通过引用或者指针实现的,当然指针本身还是整 ...

  4. Codeforces Gym 100650D Queens, Knights and Pawns 暴力

    Problem D: Queens, Knights and PawnsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu ...

  5. ShareSDK for iOS 2.9.0已经公布

    ShareSDK for iOS v2.9.0已经公布,本次更新内容包含: 1.修复Facebook获取用户信息报错问题 2.修复Instagram在iPad上显示分享菜单错误问题,须要指定菜单容器. ...

  6. 取消掉Transfer-Encoding:chunked

    先说解决方法:::不让服务器返回Transfer-Encoding:chunked,在客户端请求的时候可以使用http 1.0的协议. 有时候,Web服务器生成HTTP Response是无法在Hea ...

  7. 贪心算法(Greedy Algorithm)之最小生成树 克鲁斯卡尔算法(Kruskal&#39;s algorithm)

    克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个.这里面充分体现了贪心算法的精髓.大致的流程能够用一个图来表示.这里的图的选择借用了Wikiped ...

  8. c#智能感知(设置)及实现

    1) 使用工具->选项菜单命令,选择文本编辑器->C#设置, 将上面圈出的2个复选框(自动列出成员和参数信息)打勾, 然后 Intellisense就会工作了.(如果没这么多选项,请勾选S ...

  9. c语言_判断例子

    例一: #include "stdio.h" int main() { ; if(i) printf("hi"); if(!i) printf("hi ...

  10. C语言第三节关键字、标识符、注释

    学习语法之前的提醒 C语言属于一门高级语言,其实,所有高级语言的基本语法组成部分都是一样的,只是表现形式不太一样 就好像亚洲人和非洲人,大家都有人类的结构:2只 手.2只脚.1个头,只是他们外表不太一 ...