初衷:
生平第一次写技术博客,真有点无所适从。关于Object-C,目前正打算开始学习,博客的写作,也权当日常的学习笔记,希望在不断的积累过程中提高自己。在博客这个平台上,也让自己不忘自己对于技术的初衷——Mide Wide Open。
tag1:Object-C和C(Objective-C的内核是C语言的,并基于C语言实现OOP的一些特性。Objective-C是对C语言的扩展)
与Object-C相比:
1.C是面向过程,Object是面向对象的;
2.数组、函数、指针、结构、联合的用法和 C 一样;
3.循环语句(do while、while、for)、条件语句( if 语句(if-else、复合判断条件等)、switch 语句 )、
Boolean(YES NO)、条件运算符、goto 语句、空语句、逗号表达式、sizeof 运算符、命令行参数、位操作都
和 C 一样;
4.BOOL使用8位存储,YES定义为1,NO定义为0,大于1不为YES,跟标准C不同。 若不小心将一个长于1字节的整型值赋给BOOL,则只截取低八位
Obejective-C中1不等于1,绝对不要将BOOL值和YES比较 。
tag2:Cocoa
Cocoa组成部分有:(1)Foundation框架(有很多有用的,面向数据的低级类和数据结构);(2)Application Kit(也称AppKit)框架(包含了所有的用户接口对象和高级类,例如NS……)(3)还有一个支持框架的套件,包括Core Animation和Core Image。
tag3.Objective-C常见语法说明:
1 头文件引用使用 #import “文件名”或者 #import <文件名>的形式以确保每个头文件仅被包含一次;
2 类声明以 @interface 类名:继承类 开头,以 @end 结尾,类实现以@implementation 类名 开头,以 @end 结尾;
3 实例方法,即成员方法,在方法名前面添加一个减号(-);类方法,在方法名前面添加一个加号(+);
4 类方法的调用格式为 [类名 类方法],成员方法调用格式为 [实例名 实例方 法],这种模式在ObjC中被称为消息机制,[对象 消息]即给对象发送了一个消息,产生的 效果就是该对象调用了该类中定义的对应的实例方法。
tag4.下面通过一个例子比较一下OC和C++
---------------------------------------------------------------------------------------------------------------------------------
Object-C:
#import <Foundation/Foundation.h>
@interface Student : NSObject
{ //Objective-c的所有类都继承于NSObject
// 成员属性
NSString *name;
NSString *number;
}
//在Objective-C 2.0引入了属性合成,相当于之前的get/set方法
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *number;
// 类方法
+ (NSString*)printName;
@end
Print类.m文件(实现文件)
#import "Print.h"
@implementation Student
@synthesize name;
@synthesize number;
// 类方法
+ (NSString*)printName
{
return (@"MikyLin'sBlog");
}
@end
Print 类使用
#import "Print.h"
int main(int argc, const char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
return NSApplicationMain(argc, (const char **)argv);
// 类方法调用
NSLog(@"PrintName = /"%@/"", [Student printName]);
// 初始化
Student* student1 = [Student alloc] init];
// 设置器调用
[student1 setName:@"MikyLin"];
[Student1 setNumber:@"001"];
// 获取器调用
NSLog(@"Name = /"%@/"", [student1 name]);
NSLog(@"Number = /"%@/"", [student1 number]);
[pool drain];
return 0;
}
运行结果:
ClassName = "MikyLin'sBlog"
Name=MikyLin
Number=001
--------------------------------------------------------------------------------------------------------------------------------
C++:
#include<iostream>
using namespace std;
class Student
{
String name;
String number;
public:
Student(String a,String b);
String printName();
}
Student::Student(String a,String b)
{
name=a;
number=b;
}
String Student::printName()
{
return "MikyLin'sBlog";
}
void main()
{
String temp1,temp2;
temp1=Miky;
temp2="001"
Student student1(temp1,temp2);
printf("ClassName=%s\n",student1.printName() );
printf("Name=%s\n",student1.name);
printf("Number=%s\n",student1.number);
}