Object-C 介绍

介绍

Object-C 是一个为苹果IOS 和OS X系统编写程序的语言。它能够编译和构建命令行功能、GUI、领域框架的通用语言。他也提供了很多的功能帮助维护复杂的应用。

Types of programs written in Objective-C

像C++一样,Object-C也是在C语言的基础上添加了面向对象的特性,但是两种语言完成这个目标,采用了明显不同的基础哲学。Object-C明显更加的偏向动态语言,推迟它的决定到运行时,而不是编译时。这个表现在IOS 和 OS X开发的设计模式。

Objective-C 冗长的命名规约大家周所周知。导致的结果是:最终的代码很具有描述性,所以几乎不可能导致误解或者错用。比如是相同功能的代码片段用C++和Object-C分别表示结果:

// C++
john->drive("Corvette", "Mary's House")
// Objective-C
[john driveCar:@"Corvette" toDestination:@"Mary's House"]

正如您所看到的,用Object-C语言编写的阅读起来更像是自然语言,而C++更像是机器语言。如果您习惯了Object-C的语法,学习一个新的工程或者学习第三方的代码是很容易的。
如果您对这种方括号的语法规则还是不适应,不要担心。阅读完本教程您将会熟悉他们。

Frameworks

像其他的语言一样,Object-C语言包括一个相当简单的语法规则和一个标准的开发包(SDK)。
本教程主要关注语言本身。但是教程将帮助大家了解一些框架,这些框架或者工具是我们通常能用到的。

有一些标准包不在我们本教程讨论的范围,但是Apple’s Cocoa and Cocoa Touch 框架是当前最流行的。他们分别为OS X 应用开发和IOS应用的开发定义了各自的api。下面表格中列出了在Cocoa and Cocoa Touch中的框架。想获取更加详细的信息,请参考Mac 技术概述和IOS 技术概述。

FrameworkDescription
FoundationDefines core object-oriented data types like strings, arrays, dictionaries, etc. We’ll explore the essential aspects of this framework in the Data Types module.
UIKitProvides dozens of classes for creating and controlling the user interface on iOS devices.
AppKitSame as UIKit, but for OS X devices.
CoreDataProvides a convenient API for managing object relationships, supporting undo/redo functionality, and interacting with persistent storage.
MediaPlayerDefines a high-level API for playing music, presenting videos, and accessing the user’s iTunes library.
AVFoundationProvides lower-level support for playing, recording, and integrating audio/video into custom applications.
QuartzCoreContains two sub-frameworks for manipulating images. The CoreAnimation framework lets you animate UI components, and CoreImage provides image and video processing capabilities (e.g., filters).
CoreGraphicsProvides low-level 2D drawing support. Handles path-based drawing, transformations, image creation, etc.

当您熟悉Object-C之后,有一些能帮助您构架IOS和 OS X应用的工具。再次强调,教程不是一个完整的app开发的教程,也就是说不教您学习上面的框架。除了Foundation 框架,您将不会学习其他的框架。

如果您对Mac应用开发感兴趣,您可以参考Ry’s Cocoa 教程,当然您必须先对Object-C有扎实的掌握。教程教您怎样构建一个OS X应用使用相同的方法,像本教程一样。

Xcode

Xcode是苹果公司为开发Mac 、iPhone和iPad应用而开发的集成开发环境(IDE).它不仅报错源代码编辑器,而且包括界面设计工具( interface builder),设备模拟器、综合测试和调试工具、上一节提到的框架以及开发app所需要的其他的内容。

当然也有其他的方法可以编译Object-C代码,但是Xcode肯定是最容易学习的。我建议您现在就安装Xcode,这样您就可以跟着学习本教程后面的例子。Xcode可以从Mac App Store 免费获取。

Creating an Application 创建一个应用

Xcode 为我们提供了 iOS and OS X 应用的各种模板。所有多可以通过导航:File > New > Project…或者Cmd+Shift+N快捷键找到。我们将打开一个对话框,询问您选择模板。

Creating a command line application

对于本教程,我们将选择Command Line Tool模板,通过OS X > Application能找到,在截图中是高亮的。这样使我们省去了设置iOS/OS X 的特殊的内容,而是关注Object-C本身。接着往下走,创建一个Command Line Tool的工程。这样打开另一个对话框,要求您配置工程信息。

Configuring a command line application

您可以填写任何您喜欢的Product Name 和Organization Name;对于Company Identifier使用 edu.self,这是一个标准的个人是用的标示。对于上线的app,如果您注册为一个Apple 开发者,您将可以从Apple获取公司标示。

本教程将使用一些类,他们是定义在Foundation框架中的。所以您需要确定Type 字段,选择是Foundation。最后,Use Automatic Reference Counting 复选框通常是被选择的。

点击Next,提示你选择一个工程存储的位置,这样您应该就有了一个可以使用的Xcode工程。在Xcode的左边,您应该可以看到有一个main.m的文件。现在,这个文件包括你工程的所有。注意以.m为扩张名的文件,通常被作为Object-C的源代码文件。

这里写图片描述

为了编译工程,可以点击在左上角的Run按钮或者使用Cmd+R快捷键。这是您应该能在Xcode的Output 面板中看到输出:Hello, World!

Xcode’s Output Panel

The main() Function

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}

在 @autoreleasepool块中您可以编写代码、实验本教程的代码片段。上面的main()调用了定义在Foundation 框架中的函数。这是Object-C通用工具,为了输出消息到控制台。您也注意到了,Object-C中的字符串之前有@前缀。

在整个教程中,您将通过编辑上面您看到的main.m中的内容,观察语言的特性工作原理,但是在真正的开发中,您几乎不可能修改模板提供的main函数内容。对于大多数应用,main()只有一个功能,就是将控制权交给“application delegate”。比如,Mac app 工程的默认main函数如下:

#import <Cocoa/Cocoa.h>

int main(int argc, const char * argv[]) {
    return NSApplicationMain(argc, argv);
}

但是,我们将一直使用command line tools类型的工程,所以上面的例子已经超出了教程的范围。然而Application delegates 是OS X 和 IOS 应用的一部分。Ry’s Cocoa教程的前几章将详细的讲述。

准备好!

接下来的两章将学习C语言语法。之后,我们将学习类、方法、协议和其他面向对象内容。本教程是由大量的可以实践的例子组成的。我们建议您,粘贴这些例子的代码,在您刚才创建的工程中,提供一些参数,观察会发生什么。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Objective-C 中,可以使用 AVFoundation 框架来实现扫描二维码并跳转到图片。以下是一个简单的示例代码: ```objective-c // 导入 AVFoundation 框架 #import <AVFoundation/AVFoundation.h> // 创建扫描器 AVCaptureSession *session = [[AVCaptureSession alloc] init]; // 创建视频输入设备 AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; if (input) { [session addInput:input]; } else { NSLog(@"无法创建视频输入设备"); } // 创建元数据输出对象 AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init]; [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; [session addOutput:output]; // 设置二维码类型 output.metadataObjectTypes = @[AVMetadataObjectTypeQRCode]; // 创建预览层 AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session]; previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; previewLayer.frame = self.view.bounds; [self.view.layer addSublayer:previewLayer]; // 启动扫描器 [session startRunning]; ``` 上述代码会创建一个扫描器,并在界面上显示一个预览层。当扫描到二维码时,会触发以下代理方法: ```objective-c - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { // 遍历扫描到的元数据对象 for (AVMetadataMachineReadableCodeObject *metadata in metadataObjects) { // 判断是否为二维码 if ([metadata.type isEqualToString:AVMetadataObjectTypeQRCode]) { // 获取二维码内容 NSString *stringValue = metadata.stringValue; // 跳转到图片 UIImage *image = [UIImage imageNamed:stringValue]; if (image) { UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; imageView.contentMode = UIViewContentModeScaleAspectFit; imageView.frame = self.view.bounds; [self.view addSubview:imageView]; } // 停止扫描 [session stopRunning]; } } } ``` 在上述代理方法中,当扫描到二维码时,会获取二维码内容,并根据内容加载一张图片,并添加到界面上。同时,停止扫描器的运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值