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. Visual Studio 调用 Delphi DLL 会退出的解决方案

    新写了一个 Delphi 的 dll 供 C# 程序调用,却发现在使用 Visual Studio 2012 进行调试时,程序会在调用后自动退出. 经过对比,只需要将工程属性中“调试”一页下的“启用 ...

  2. hdu 5587 Array 数学题

    Array Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5587 De ...

  3. codeforce447 D SGU 548 贪心+优先队列

    codeforce447 D - DZY Loves Modification 题意:有一个n*m的矩阵,每次可以选择一行或者一列,可以得到这行或这列的所有元素sum的积分,然后使这一列/行的每一个元 ...

  4. 【android】在eclipse中查看genymotion模拟器的sd卡文件夹

    假设用google自带模拟器或者真机调试时,sd卡文件夹是在/mnt/sdcard.这个相信大家都知道. 但是今天用genymotion调试时.发现根本打不开/mnt/sdcard这个文件夹,当时也没 ...

  5. Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(二)

    一.Servlet之Request         Web服务器会对收到的每一次客户端http请求分别创建一个用于代表请求的request对象和代表响应的response对象.要获取客户端提交的数据需 ...

  6. zend studio 函数不提醒 小黄图标 小黄标

    在用 Zend Studio 编写 PHP 项目时发现调用系统函数时调试正常, 但是在编写代码时却提示函数未定义"Call to undefined function ", 在左侧 ...

  7. Helpers\Hooks

    Helpers\Hooks Add modules with hooks The hooks helper allows modules to be created within the module ...

  8. 你真的会用UITableView嘛

    UITableView是工程开发中最经常使用到的UI控件,但是你真的了解它嘛,这里记录几点有用的但你可能并不知道的. 当我们的数据未能显示满一屏幕的时候,UITableView会显示多余的横线,这个时 ...

  9. Josephina and RPG

    Josephina and RPG Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  10. 使用socket实现信用卡程序和迷你购物商城

    #-*- coding:utf-8 -*- from moudle import * import socketserver import json import os import time imp ...