- 浏览: 677001 次
- 性别:
- 来自: 深圳
最新评论
-
fingerplay:
请问一下,第一份,逻辑树,就是代码里可以操纵的,例如更改lay ...
UIView与CALayer -
ok_lyc:
分享到哪里去了
iPhoneUIFont各种字体 -
lliiqiang:
我的个人理解:wait方法是在java虚拟机层面上在获取对象锁 ...
JAVA多线程同步wait、notify、synchronized -
milixw:
谢谢分享,就在找这个
iphone 推送通知 java 实现 -
wsqwsq000:
你的log4j包不行,上网搜一下:log4j-1.2.16.j ...
iphone 推送通知 java 实现
C++和Objective-C混编(官方文档翻译) 原文网址: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCPlusPlus.html Using C++ With Objective-C 苹果的Objective-C编译器允许用户在同一个源文件里自由地混合使用C++和Objective-C,混编后的语言叫Objective-C++。有了它,你就可以在Objective-C应用程序中使用已有的C++类库。 Objective-C和C++混编的要点 在 Objective-C++中,可以用C++代码调用方法也可以从Objective-C调用方法。在这两种语言里对象都是指针,可以在任何地方使用。例 如,C++类可以使用Objective-C对象的指针作为数据成员,Objective-C类也可以有C++对象指针做实例变量。下例说明了这一点。 注意:Xcode需要源文件以".mm"为扩展名,这样才能启动编译器的Objective-C++扩展。 /* Hello.mm * Compile with: g++ -x objective-c++ -framework Foundation Hello.mm -o hello */ #import <Foundation/Foundation.h> class Hello { private: id greeting_text; // holds an NSString public: Hello() { greeting_text = @"Hello, world!"; } Hello(const char* initial_greeting_text) { greeting_text = [[NSString alloc] initWithUTF8String:initial_greeting_text]; } void say_hello() { printf("%s/n", [greeting_text UTF8String]); } }; @interface Greeting : NSObject { @private Hello *hello; } - (id)init; - (void)dealloc; - (void)sayGreeting; - (void)sayGreeting:(Hello*)greeting; @end @implementation Greeting - (id)init { if (self = [super init]) { hello = new Hello(); } return self; } - (void)dealloc { delete hello; [super dealloc]; } - (void)sayGreeting { hello->say_hello(); } - (void)sayGreeting:(Hello*)greeting { greeting->say_hello(); } @end int main() { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; Greeting *greeting = [[Greeting alloc] init]; [greeting sayGreeting]; // > Hello, world! Hello *hello = new Hello("Bonjour, monde!"); [greeting sayGreeting:hello]; // > Bonjour, monde! delete hello; [greeting release]; [pool release]; return 0; } 正如你可以在OC接口中声明C结构一样,你也可以在OC接口中声明C++类。跟C结构一样,OC接口中定义的C++类是全局范围的,不是OC类的内嵌类(这与标准C(尽管不是C++)提升嵌套结构定义为文件范围是一致的)。 为了允许你基于语言变种条件化地编写代码,OC++编译器定义了__cplusplus和__OBJC__预处理器常量,分别指定C++和OC。 如前所述,OC++不允许C++类继承自OC对象,也不允许OC类继承自C++对象。 class Base { /* ... */ }; @interface ObjCClass: Base ... @end // ERROR! class Derived: public ObjCClass ... // ERROR! 与 OC不同的是,C++对象是静态类型的,有运行时多态是特殊情况。两种语言的对象模型因此不能直接兼容。更根本的,OC和C++对象在内存中的布局是互不 相容的,也就是说,一般不可能创建一个对象实例从两种语言的角度来看都是有效的。因此,两种类型层次结构不能被混合。 你可以在OC类内部声明C++类,编译器把这些类当作已声明在全局名称空间来对待。就像下面: @interface Foo { class Bar { ... } // OK } @end Bar *barPtr; // OK OC允许C结构作为实例变量,不管它是否声明在OC声明内部。 @interface Foo { struct CStruct { ... }; struct CStruct bigIvar; // OK } ... @end Mac OS X 10.4以后,如果你设置fobjc- call-cxx-cdtors编译器标志,你就可以使用包含虚函数和有意义的用户自定义零参数构造函数、析构函数的C++类实例来做为实例变量 (gcc-4.2默认设置编译器标志fobjc-call-cpp-cdtors)。OC成员变量alloc完以后,alloc函数会按声明顺序调用构造 器。构造器使用公共无参数恰当的构造函数。OC成员变量dealloc之前,dealloc方法按声明顺序反序调用调用析构函数。 OC没有名称空间得概念。不能在C++名称空间内部声明OC类,也不能在OC类里声明名称空间。 OC类,协议,分类不能声明在C++ template里,C++ template也不能声明在OC接口,协议,分类的范围内。 但是,OC类可以做C++ template的参数,C++ template参数也可以做OC消息表达式的接收者或参数(不能通过selector)。 C++词汇歧义和冲突 OC头文件中定义了一些标识符,所有的OC程序必须包含的,这些标识符识id,Class,SEL,IMP和BOOL。 OC方法内,编译器预声明了标识符self和super,就想C++中的关键字this。跟C++的this不同的是,self和super是上下文相关的;OC方法外他们还可以用于普通标识符。 协议内方法的参数列表,有5个上下文相关的关键字(oneway,in,out,inout,bycopy)。这些在其他内容中不是关键字。 从 OC程序员的角度来看,C++增加了不少新的关键字。你仍然可以使用C++的关键字做OC selector的一部分,所以影响并不严重,但你不能使用他们命名OC类和实例变量。例如,尽管class是C++的关键字,但是你仍然能够使用 NSObject的方法class: [foo class]; // OK 然而,因为它是一个关键字,你不能用class做变量名称: NSObject *class; // Error OC里类名和分类名有单独的命名空间。@interface foo和@interface(foo)能够同时存在在一个源代码中。OC++里,你也能用C++中的类名或结构名来命名你的分类。 协议和template标识符使用语法相同但目的不同: id<someProtocolName> foo;TemplateType<SomeTypeName> bar; 为了避免这种含糊之处,编译器不允许把id做template名称。 最后,C++有一个语法歧义,当一个label后面跟了一个表达式表示一个全局名称时,就像下面: label: ::global_name = 3; 第一个冒号后面需要空格。OC++有类似情况,也需要一个空格: receiver selector: ::global_c++_name; 限制 OC++ 没有为OC类增加C++的功能,也没有为C++类增加OC的功能。例如,你不能用OC语法调用C++对象,也不能为OC对象增加构造函数和析构函数,也不 能将this和self互相替换使用。类的体系结构是独立的。C++类不能继承OC类,OC类也不能继承C++类。另外,多语言异常处理是不支持的。也就 是说,一个OC抛出的异常不能被C++代码捕获,反过来C++代码抛出的异常不能被OC代码捕获。
发表评论
-
iphone开发如何后台播放音频
2012-12-25 14:38 1567<!--?xml version="1.0&q ... -
iPhone开发中使用AVAudioPlayer出现内存泄漏的解决办法
2012-12-25 11:53 3352最近在使用AVAudioPlayer播放音频时,发现 ... -
dispatch多线程
2012-10-31 20:45 1463#define kBgQueue dispat ... -
iPhone开发使用数组排序
2012-10-30 19:18 1793我们以数组的排序为例(也许NSSortDes ... -
用containsObject判断是否存在的问题
2012-10-16 15:37 4566在NSArray或NSMutableArray中想使用c ... -
用NSZombieEnabled解决恼人的EXC_BAD_ACCESS错误
2012-09-17 10:30 1384转载自:http://longtimenoc.com/a ... -
使用xib加载视图后,在dealloc中crash
2012-09-08 11:20 1771最近遇到个问题,就是使用xib加载视图后,经常会 ... -
iPhone中如何获取当前输入法
2012-09-06 16:28 1703如题,在iPhone开发中,我们如何获取当前的输入 ... -
objectForKey和valueForKey的区别
2012-08-24 17:23 2168valueforkey和objectforkey区别 ... -
粒子发射系统中的CAEmitterLayer
2012-08-22 16:00 2523简介:CAEmitterLayer提供了一个基于 ... -
iPhone开发使用UILineBreakMode不精确
2012-07-26 12:02 1554一开始用UILineBre ... -
Xcode方法提示不显示的解决办法
2012-07-24 09:45 1616Xcode方法提示显示的不正确,只显示方法 ... -
NSArray的排序功能sortedArrayUsingSelector
2012-07-18 17:54 2235- (NSArray *)sortedArrayUs ... -
iPhoneUIFont各种字体
2012-07-24 09:45 1571苹果开发者们想在应用中使用不同字体的话,往往会发现 ... -
iPhone使用ASIHTTPRequest请求时,发送了2次请求
2012-07-24 09:45 2561前段时间用到ASIHTTPRequest做请求时, ... -
iPhone开发调用新浪微博OAuth2.0
2012-06-05 02:30 3106就像题目说的,这次的小项目是做一个新浪微博的客 ... -
Iphone cover flow 开源实现
2012-06-04 00:04 891tapkulibrary-CloverFlow ... -
ASIHTTPRequest下载示例(支持断点续传)
2012-07-24 09:45 1601在工程中,我们会常常遇到需要下载的程序,比 ... -
ASIHTTPRequest类库简介和使用说明
2012-07-24 09:45 1698文章转载自:http: ... -
NSUserDefaults 用户偏好设定保存自定义类(序列化)
2012-04-17 23:30 0NSUserDefaults 用户偏好设定保存 ...
相关推荐
Objective-C语言将决定尽可能的从编译和链接时推迟到运行时。只要有可能,Objective-C总是使用动态的方式来解决问题。这意味着Objective-C语言不仅需要一个编译器,同时也需要一个运行时系统来执行编译好的代码。这儿...
自己在Xcode4下编写的Objective-C和C语言混编的计算器
From C++ to Objective-C(中文版),iphone开发者必备。
读者在阅读《objective-c程序设计》后,可以掌握objective-c语言的基本内容,并进行实际的iphone/ipad和mac应用开发。《objective-c程序设计》共分成11章。前6章讲述objective-c语言,包括数据类型、运算符、表达式...
Objective-C,通常写作ObjC和... 让我们先来看看C++和Objective-C中对于类的宣言 : C++ #include "BaseClass.h" class MyClass : public BaseClass { public: MyClass(); .......................
iPhone开发资料之Objective-C语言简介,网上收集的.
More iPhone Development with Objective-C is an independent companion to Beginning iPhone Development with Objective-C. That is, it is a perfect second book, but it is also a great book for those ...
Objective-C是创建Mac OS应用和iPhone应用的主要语言,优雅的面向对象编程环境与C语言特性珠联璧合,造就了它的不俗表现。 本书全面而系统地讲述Objective-C语言的基础知识和面向对象编程的重要概念,结合实例...
Objective-C是扩展C的面向对象编程语言,也是iPhone开发用到的主要语言。本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中...
在windows系统下搭建Objective-C开发环境,由于公司要做iphone开发,个人学习objc(Objective-C)语法,所以在windows7下搭建了一个objc开发环境,现把自己整理的帮助文档拿来与大家分享,希望能对大家有所帮助。...
elcome to Learn Objective- C on the Mac! This book is designed to teach you the basics of the Objective- C language. Objective- C is a superset of C and is the language used by many (if not most) ...
Objective-C是扩展C的面向对象编程语言,也是iPhone开发用到的主要语言。本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中...
通过与C++的对比,结合代码来讲述Objective-C,初学者必备的Objective-C资料
全书共分为四大部分:第一部分全面讲解了Objective-C语言的基础知识,包括类、对象、方法、数据类型、表达式、程序结构、继承、多态、动态类型和动态绑定、函数、数组、结构和指针等;第二部分详细阐述了Foundation...
Objective-C基础教程.pdf(Learn Objective-C on the Mac中文版) 中文扫描版 + 英文电子书 + 源码 该资源在Mac下用BetterZIP压缩,共三个分卷,其他分卷在我的资源中找。 更新: Windows下使用7zip对part1解压...
《Objective-C基础教程》结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关...通过阅读《Objective-C基础教程》,再结合《iPhone开发基础教程》和《iPhone开发秘籍》,定能在iPhone开发进程中所向披靡!
Title: More iPhone Development with Objective-C, 3rd Edition Author: Alex Horovitz, David Mark, Jayant Varma, Jeff LaMarche, Kevin Kim Length: 512 pages Edition: 3 Language: English Publisher: Apress ...