已经有备案的公司网站 还能不能加网站,wordpress后台仪表盘,怎样将自己做的网站给别人看,如何自学仓管erp系统Objective-C是非常实用的语言。它是一个用C写成很小的运行库#xff0c;令应用程序的尺寸增加很小#xff0c;和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。Objective-C写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smallta…Objective-C是非常实用的语言。它是一个用C写成很小的运行库令应用程序的尺寸增加很小和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。Objective-C写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。因此Objective-C它完全兼容标准C语言C对C语言的兼容仅在于大部分语法上而在ABIApplication Binary Interface上还需要使用extern C这种显式声明来与C函数进行兼容而在此基础上增加了面向对象编程语言的特性以及Smalltalk消息机制。 [1]
Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一很多人考虑到Smalltalk回收时有漫长的死亡时间令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入这个功能。
虽然Objective-C是C的超集但它不是C的基本类型为第一级的对象。 异同
Objective-C同C的异同
和C不同Objective-C不支持运算符重载(它不支持ad-hoc多型)。亦与C不同但和Java相同Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处而且没有很多缺点例如额外执行时间过重和二进制不兼容。
Objective-C和C的比较
单一继承
和Java、Smalltalk一样Objective-C不支持多重继承而C语言支持多重继承。
动态
Objective-C是动态定型dynamicaly typed)它的类库比C容易操作。Objective-C 在运行时可以允许根据字符串名字来访问方法和类还可以动态连接和添加类。
C 跟从面向对象编程里的Simula 67(一种早期OO语言学派而Objecive-C属于Smalltalk学派。
在C里对象的静态类型决定你是否可以发送消息给它而对Objective-C来说由动态类型来决定。Simula 67学派更安全因为大部分错误可以在编译时查出。 而Smalltalk学派更灵活比如一些Smalltalk 看来无误的程序拿到Simualr67那里就无法通过。
从很多方面来看C和Objective-C的差别与其说是技术上的 不如说是思维方式上的。你是否想更安全而舍弃灵活性Simular67学派的支持者称既然程序设计出色何必再要灵活性而 Smalltalk学派则称为了灵活可以容忍运行时多出错。 优缺点
Apple在其Mac OS X 10.3中仍未引入垃圾回收这个功能。不过令人欣慰的是在Apple发布的Xcode4中已经支持自动释放不等同于严格意义上的垃圾回收因为两者机制不同。在Xcode4中的自动释放也就是ARC(Automatic Reference Counting)机制不需要用户手动去Release一个对象而是在编译期间编译器会自动帮你添加[NSObject release]。
另一个问题是Objective-C不包括命名空间机制(namespace mechanism)取而代之的是程序设计师必须在其类别名称加上前缀时常引起冲突。在2004年在Cocoa编程环境中所有Mac OS X类和函数均有“NS”作为前缀例如NSObject或NSButton以表明它们属于Mac OS X核心使用“NS”是由于这些类和函数在NeXT OpenStep开发时定下的。
虽然Objective-C是C的超集但它不视C的基本型为第一级的对象。
由于Objective-C使用动态运行时类型而且所有的方法都是函数调用有时甚至连系统调用syscalls也如此很多常见的编译时性能优化技术失效例如内联函数、常数传播、交互式优化、纯量取代与聚集等。这使得Objetive-C性能劣于类似的对象抽象语言如C。不过Objective-C拥护者认为既然Objective-C运行时消耗较大Objective-C本来就不应应用于C或Java常见的底层抽象。
interface 部分 位于.h文件
interface MyObject : NSObject {int memberVar1; // 实体变量id memberVar2;
}(return_type) class_method; // 类方法-(return_type) instance_method1; // 实例方法
-(return_type) instance_method2: (int) p1;
-(return_type) instance_method3: (int) p1 andPar: (int) p2;
end
注以上的号表示类方法不需要实例就可以调用-号表示实例方法必须要实例才能对其进行调用
implementation 部分 位于.m文件
implementation MyObject () protocol1,protocol2{int memberVar3; //私有實體變數
}属性
property(copy) NSString *name;
property(readonly) int age;方法
(return_type) class_method {.... //method implementation
}
-(return_type) instance_method1 {....
}
-(return_type) instance_method2: (int) p1 {....
}
-(return_type) instance_method3: (int) p1 andPar: (int) p2 {....
}
end
Interface区块可定义实体变量Implementation区块也可以定义实体变量两者的差别在于访问权限的不同Interface区块内的实体变量默认权限为protected宣告于implementation区块的实体变量则默认为private故在Implementation区块定义私有成员更匹配面向对象之封装原则因为如此类别之私有信息就不需曝露于公开interface.h文件中
注以上的() class1,class2,..表示当前的类MyObject遵从协议protocol1和protocol2在当前类MyObject需要重写protocol1,protocol2的方法
协议Protocol部分
protocol Locking
- (void)lock;
- (void)unlock;
end