Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发者需要了解什么?)

Qt/C++开发者眼中的Obj-C

对于我们第一次自定义iOS应用来说,对于来自Qt/C++开发者来说,我不得不学习Objective-C相关语法与知识

为了让读者能够更容易理解这篇博客的内容,我将描述诸多我所学到的东西.这将更多的是大脑转存而不是单一的教程

,所以我仍然希望这将对你很有帮助,我将首先写编程语言的差异,然后再写关于类库的差异

1.Objective C vs C vs C++

类似于C++,Obj-c是C语言的一个超集(这不是100%正确的,但是一个足够好的语句来理解它),您将使用的文件扩展名的头.h和.m来表示Obj-C语法

注意还有obj- c++文件扩展名.mm,虽然我现在还不会写.

类似于塞班c++,Obj-C是使用两个阶段进行构造:首先你在堆上分配对象,然后调用init方法.

通常可以避免调用两个方法和只使用一个静态简便的方法,直接给你一个新分配的对象(例如stringWithCString).

完全不同(起初非常分散)是Obj-C函数的调用方法,类似通常的C-ish方式,例如NSLog(@“我的日志消息”);但也有Obj-C语法对象的调用方法。

作为一个例子,这是对象有一个方法包含两个参数:obj(obj methodName:param1value param2:param2Value]。看起来很奇怪甚至别扭,但你要去适应它。

在Objective C,这是通常被称为发送消息,不仅仅是它的调用方法,还有好多我发现更加混乱.

在上面这个方法示例,methodName是所谓的选择器。一个选择器是一个方法的标识符。有时你必须识别方法(类似于一个函数指针),

在上面的例子中你可以这样写@selector(methodName:param2:).

在c++中没有根对象和Qt QObject仅用于一些对象,Objective C有强制性的根对象NSObject .

相反Qt你想信号/插槽,你只用QObject类,而Obj-c这里你用NSObject做任何事情.

自从iOS 5 实现ARC(自动引用计数),认为它像一个隐式QSharedPointer在你的对象。编码过程感觉到你有一个垃圾收集器。在内部,ARC告诉编译器插入保留(增加引用计数)和释放(减量引用计数和最终销毁)语句在您的代码中。

我认为这是很棒的,如果你坚持正常的做事的方式你基本上可以不再再担心内存泄漏.

Objective C属性类似于Qt中的Q_PROPERTY,这意味着您可以使用好obj.var = foo语法在代码内部(obj setVar:foo)消息称为(好吧. .消息发送)。您可以创建一个属性@property和编译器使用@synthesize为你做一个getter / setter。

当然也可以定制getter / setter实现更多的内部逻辑,例如实现延迟初始化。

你能想象Objective C委托作为一组插槽。委托对象的一个委托方法被对象调用通知某些事情已经发生。这非常类似于Java的接口

2.与Qt相关类相类似的东西

与语法一样重要是相关的库所提供的iOS(和OS X)。请继续阅读,了解他们提供的对象和功能。

NSString对象是一个常量字符串。您还可以创建通过@“followed by me”。有一个可变的字符串,必须使用NSMutableString配合其appendString,appendFormat等功能。尤其是appendFormat真的很有用。

如果你想做替换,stringByReplacingOccurrencesOfString是你的朋友,给你一个新的NSString对象。若是构建文件系统的路径,您可以使用stringByAppendingPathComponent。

像在c++中,基本类型像int不是对象。如果你需要包装在一个对象,您可以使用NSNumber和NSValue ,QVariant(类似)。据我所知:您可以使用intValue NSNumber或者NSString方法等转换为int类型。

NSArray、NSSet NSDictionary他们听起来像:一个容器来存储NSObjects。NSArray相当于QList,NSSet等于 QSet,还有NSDictionary 类似于QHash / QMap。

您需要使用他们可变泛型改变他们(例如NSMutableArray)。如果你想存储原始类型,您需要使用NSNumber、NSValue等包装。对于NSArray,您可以通过使用objectAtIndex访问对象。

NSDictionary,你使用valueForKey或objectForKey。

我没有做太多的关于文件IO方面的,所以我不能过多的写。有NSFileManager目录操作。你可以很容易地读(小)文件通过NSString stringWithContentsOfFile或NSData dataWithContentsOfFile。

记得在OS X和iOS系统都是基于POSIX标准,因此你也可以使用系统的方法得到原始性能或者效率更高。

谈到NSData:这是相当于Qt中QByteArray,可变的泛型,可以看看NSMutableData。你可以通过数据或访问mutableData方法得到char *指针。

我觉得现在的大多数移动应用程序使用HTTP。在Qt您将使用QNetworkAccessManager。在Objective C,你使用一个NSMutableURLRequest NSURLConnection内(或NSURLRequest)。您需要设置NSURLConnection委托。

委托处理异步事件时产生下载(readyRead信号连接:didReceiveData:完成信号connectionDidFinishLoading:等)。

如果你想做基于套接字的IO,我只能推荐GCDAsyncSocket。我以前尝试套接字编程iQuassel项目有几个原因,主要因为你必须使用Carbon代替Cocoa。GCDAsyncSocket也有不错的优势,您可以很容易地在一个线程中进行网络协议解析,避免阻塞UI线程。

谈到线程:你可以通过使用NSObject 的performSelectorInBackground实现基本的并发性。它使一个方法在后台线程中运行。它可以通过performSelectorOnMainThread传达其结果到主线程。如果你想做一个Qt-tish 0计时器调用,检查afterDelay: performSelector变异,选择器运行在一个事件循环调用。

更多高级先进的东西可以用NSOperationQueue或中央CPU调度。

NSRunLoop相当于Qt中的QEventLoop 。如果你在另一个线程处理事情和需要一个事件循环,例如网络IO。那您可以使用它来处理。

NSUserDefaults是一个很好的方式来存储和加载应用程序设置(与QSettings相类似)。

不幸的是Obj-c没有类似于于QtXmlPatterns的相关对象。libxml2存在在iOS设备上,因此您可以使用。对于简单的sax风格的解析,至少有NSXMLParser可以对付。

3.UI Things

XCode有视觉设计师(包括界面构建器),设计师可以设计一个故事板(UIStoryboard)包含大量的视图控制器(UIViewController子类)。每个视图控制器管理视图(还记得MVC吗?)。导航视图之间通过演变(UIStoryboardSegue)发生。

您可以通过源视图控制器的prepareForSegue方法在视图控制器之间移动数据。在得到由OS特定事件发生时调用每个视图控制器类似viewWillAppear等方法。

您使用“outlets”链接与他们的同一在界面构建器UI文件中控件的实例(例如UIButton、UILabel),用CTRL组合键进行拖拽.

Qt的诸多视图和控件,我不做太多与之对应的Obj—C方面的控件的比较。这里就看看UITableView的内容包括使用你的UITableViewDataSource 和UITableViewDelegate。我想说的几乎所有的iOS应用程序都会使用表视图。

如果你已经使用过QWebView,换成UIWebView也是一样.

QImage和QPixmap 等同于CGDataProviderRef,NSImage和CGImage.

你可以使用核心图形的方法自定义绘图。UIGraphicsBeginImageContextWithOptions创建一个上下文,您可以使用绘图功能。如果你想获得位图的上下文,尝试UIGraphicsGetImageFromCurrentImageContext。

QRect,QPoint是CGRect等价物,CGPoint CGSize。有助于你调试,检查NSStringFromCGRect和它的朋友们。

对于小部件,注意NS * UI类对应于OS X和UI *类对应于iOS.

4. Misc

当我开发Qt,我使用QtCreator,我的联合创始人奥利弗是KDevelop的粉丝,他也应该很喜欢QtCreator,对于iOS开发,您可以使用苹果免费的XCode开发工具。

苹果的工程师还为您提供一些单元测试类似于Qt的QTest。在XCode,创建一个新的测试类和使用方法例如:STAssertEquals STAssertTrue等等.

5.Want to know more?

我猜想 Qt的开发者论坛网站(http://qt-project.org/forums/)就相当于StackOverflow,iOS编程大多数问题在StackOverflow都可以找到答案和帮助。还有一个内部苹果开发者论坛(https://idmsa.apple.com/IDMSWebAuth/login?appIdKey=4a75046cda87eab6386a9eae8caabb9824e328b9abc988119b39296495ec184c&path=/login.jspa)。

当然,如果你在Qt应用程序移植到iOS需要任何帮助 . 这就是Woboq能为你做的一件事!麻烦写信给我们.

时间: 2024-10-12 10:08:37

Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发者需要了解什么?)的相关文章

Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发人员需要了解什么?)

Qt/C++开发人员眼中的Obj-C 对于我们第一次自己定义iOS应用来说,对于来自Qt/C++开发人员来说,我不得不学习Objective-C相关语法与知识 为了让读者可以更easy理解这篇博客的内容,我将描写叙述诸多我所学到的东西.这将很多其它的是大脑转存而不是单一的教程 ,所以我仍然希望这将对你非常有帮助,我将首先写编程语言的差异,然后再写关于类库的差异 1.Objective C vs C vs C++ 类似于C++,Obj-c是C语言的一个超集(这不是100%正确的,可是一个足够好的语

Qt ,mac osx ios x11 高清屏,视网膜的支持

Qt 5.0中添加了对于retina显示的基本支持.即将到来的Qt 5.1中提供了新的API和缺陷修复,对于这一问题进行了改进.Qt 4.8也获得了良好的支持,我们反向移植了一些Qt 5的补丁. 尽管这些实现的努力和Mac以及iOS程序员最为相关,但是来看一看其它平台是如何处理高DPI显示这一问题,也是很有趣的.这里主要有两种方式: 基于DPI缩放--Win32 GDI和KDE.在这种方式中,应用程序在全物理设备分辨率下工作,使用系统提供的一个DPI设定或者缩放因子,用于缩放布局.字体通常会被操

iOS 7 - Auto Layout on iOS Versions prior to 6.0

链接地址:http://stackoverflow.com/questions/18735847/ios-7-auto-layout-on-ios-versions-prior-to-6-0 Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required. iOS 7 - Auto Layout on

XE6 & IOS开发之开发者账号、苹果证书(2):关于苹果证书

XE6 & IOS开发之开发者账号.苹果证书(2):关于苹果证书 2014-08-30 21:48 网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 1.关于苹果证书. 注意,以下讨论都是以"合法注册开发者账号并支付年费"为前提,利用无证书生成iPA的请无视本文:--------------------------------------------------------------- 1.证书类型.

XE6 & IOS开发之开发者账号、苹果证书(1):关于开发者账号

XE6 & IOS开发之开发者账号.苹果证书(1):关于开发者账号 2014-08-30 21:48 网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 关于苹果开发者账号, 注意,以下讨论都是以"合法注册开发者账号并支付年费"为前提,利用无证书生成iPA的请无视本文:--------------------------------------------------------------- 1.账号类型

iOS 人机交互指导方针(iOS Human Interface Guidelines)

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. UI 设计基础 UI Design Basics 为 iOS 7 设计 Designing for iOS 7 iOS 应用剖析 iOS App

H.264格式,iOS硬编解码 以及 iOS 11对HEVC硬编解码的支持

H.264格式,iOS硬编解码 以及 iOS 11对HEVC硬编解码的支持 1,H.264格式 网络表示层NAL,如图H.264流由一帧一帧的NALU组成: SPS:序列参数集,作用于一系列连续的编码图像: PPS:图像参数集,作用于编码视频序列中一个或多个独立的图像: 这两个帧也是独立的NALU. I-Frame:关键帧,帧内编码后的帧,显示比较完全的一帧: P-Frame:参考前一帧,可能只是对比前一帧的运动估计的变化部分: B-Frame:会参照前后的帧,其他类似P-Frame.B和P F

IOS 与ANDROID框架及应用开发模式对比一

IOS 和ANDROID操作系统都是目前流行的移动操作系统,被移动终端和智能设备大量采用,两者都采用了先进的软件技术进行设计,为了方便应用开发两者都采用了先进的设计模式.两者在框架设计上都采用了什么技术?都采用了什么设计模式?两者设计思路和应用开发模式有什么异同呢? 两者都采用了框架模式. IOS 的框架称为Cocoa Touch. 框架提供两个作用,一是类的集合,每个类构建一个问题空间,并提供完整的解决方案和服务:二更重要的是框架中的类相互依赖构成一个整体,制订并实现整个应用程序的结构.框架定

iOS项目管理:目录结构和开发流程

iOS项目管理:目录结构和开发流程 最近正在做一个大版本的更新,现在在重构中.... 发现很多人在一个项目的开始不知道开发流程是什么,也不是非常清晰的知道一个项目该有目录结构.如果项目小或者是在做第一版的时候都还能应付的来,但一次比一次更新的更困难.原因就是在你项目的刚开始一个合理的目录结构,没有一个系统管理.时间久了类多了,就一头雾水.   目录结构 AppDelegate Models Macro General Helpers Utils Sections Resources 一个合理的目