1、问题
虽然在Mac上一般都是用Xcode来开发rich window-based应用。但有时候不利用Xcode项目模板插入到你的代码中的帮助会更容易看到发生了什么。
2、解决方案
Mac apps需要一些关键的组件才能工作。也就是,你需要使用NSApplication和NSWindow类来管理的应用自身以及初始的用户界面。你还需要一个app委托类,是在一个独立的文件中编写的。该app委托扮演着应用的一个帮助者,就是说要在其中编写一些关键的方法,应用工作需要用到这些方法。
3、原理
(1)App委托:
Mac应用使用了一个设计模式:委托。当你想要实现委托时,你就指派一个对象(叫委托)为另一个对象来行使权利。
app委托是一个类,需要它自己的头和实现文件。Mac app委托必须导入Cocoa框架并实现NSApplicationDelegate协议。协议就是一组属性和方法,一个类要担任委托就必须实现这些属性和方法。
定义一个app委托:
@interface AppDelegate : NSObject <NSApplicationDelegate>
app委托应当要有一个NSWindow属性并实现委托方法:(void)applicationDidFinishLaunching:(NSNotification *)aNotification;
NSWindow属性就是UI元素,你就是在它上面放用户内容的。委托方法就是一个通知,它是在你的应用完成启动时执行的。
(2)Application
Mac应用自身和前面一样,是从main函数中建立和启动的。首先需要得到NSApplication的一个实例。NSApplication是一个Cocoa类,它用了单例模式。意味着一个应用只有一个NSApplication实例。你必须用一个特别的过程来得到该对象的一个引用。
NSApplication *macApp = [NSApplication sharedApplication];
sharedApplication是一个class方法,它要么是实例化并返回一个新实例或者是返回之前就创建好过的一个实例。
一旦有了Mac application的一个应用,就能够创建一个app委托并将它设置为macApp的委托。
AppDelegate *appDelegate = [[AppDelegate alloc] init];
macApp.delegate = appDelegate;
然后,你的application必须要有一个window,所以用NSWindow类实例化一个window,将app委托的NSWindow设置为该window。
int style = NSClosableWindowMask | NSResizableWindowMask |
NSTexturedBackgroundWindowMask | NSTitledWindowMask | NSMiniaturizableWindowMask;
NSWindow *appWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(50, 50, 600, 400)
styleMask:style
backing:NSBackingStoreBuffered
defer:NO];
appDelegate.window = appWindow;
好了,运行就行了
[appWindow makeKeyAndOrderFront:appWindow];
[macApp run];
4、代码
Listing 1-16. AppDelegate.h
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (assign) NSWindow *window;
@end
---------------------------------------------------------------------------------
Listing 1-17. AppDelegate.m
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
NSLog(@"Mac app finished launching");
}
@end
------------------------------------------------------------------------------------
Listing 1-18. main.m
#import "AppDelegate.h"
int main (int argc, char *argv[]){
NSApplication *macApp = [NSApplication sharedApplication];
AppDelegate *appDelegate = [[AppDelegate alloc] init];
macApp.delegate = appDelegate;
int style = NSClosableWindowMask | NSResizableWindowMask |
NSTexturedBackgroundWindowMask | NSTitledWindowMask |
NSMiniaturizableWindowMask;
NSWindow *appWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(50, 50, 600, 400)
styleMask:style
backing:NSBackingStoreBuffered
defer:NO];
appDelegate.window = appWindow;
[appWindow makeKeyAndOrderFront:appWindow];
[macApp run];
}
5、调用——注意要链接到Cocoa
clang -fobjc -framework Cocoa AppDelegate.m main.m -o macwindowapp
相关推荐
"Jacob1.9.zip"是一个包含Jacob库1.9版本的压缩包,其中可能包含了用于不同操作系统平台的DLL动态链接库文件以及相关的文档或说明。 1. Jacob库介绍: Jacob库是由丹尼尔·马蒂亚斯·布兰德(Daniel Matthias Brand...
纯净的eclipse4.8+与之匹配的windowbuilder1.9,260多M,分成3个卷
jQuery是一款广泛应用于Web开发的JavaScript库,它极大地简化了JavaScript的DOM操作、事件处理以及动画效果。本文将深入解析jQuery 1.9版本的中文API,帮助开发者更好地理解和运用这个强大的工具。 1. jQuery选择器...
edgeOS 1.9 用户指南 中文
JDK 1.9是Java的一个重要版本,带来了许多新特性和改进,对Java开发者来说是一个里程碑式的更新。这个压缩包提供了JDK 1.9的API文档,分为中文版和英文版,方便不同语言背景的开发者理解和使用。 **模块化系统...
window版本jdk1.9,从官网下载笔记慢,可以下载去安装使用,我也是从官网下载的
5. graph.tsc - 可能是一个图形配置或脚本文件,用于在Terminal1中创建或定制图表和图形输出。这对于数据分析和监控功能尤为重要。 6. delayedsend.tsc - 这个文件可能涉及到定时发送数据的功能,允许用户设定延迟...
JDK1.9是Java开发工具包的一个重要版本,它在Java发展历程中扮演了关键的角色。作为64位版本,它专为处理大量内存和计算需求的应用设计,适用于Windows操作系统。在这个版本中,Oracle公司引入了一系列新特性、改进...
在I/O方面,JDK 1.9对`Stream`进行了扩展,增加了对文件系统操作的支持,如`Files.lines()`方法可以方便地读取文件内容为一个流。同时,`ProcessHandle`类的引入提供了更强大的进程管理功能,可以获取和控制运行中的...
标题中的“UBNT固件改MAC批量生成工具1.9”指的是一个专为UBNT设备设计的软件工具,它的主要功能是批量修改设备的物理(MAC)地址。UBNT是一家知名的网络设备制造商,其产品包括无线接入点、路由器、网桥等,广泛...
JDK1.9是Java发展历程中的一个重要里程碑,引入了多项新特性以提升性能和开发效率: 1. **模块系统(Module System)**:Jigsaw项目的一部分,将JDK和应用程序结构化为模块,增强了可维护性和安全性。模块化使得...
JDK 1.9,全称为Java Development Kit版本9,是Oracle公司发布的一个重要的Java开发工具包,专为开发人员在Windows操作系统上进行Java应用程序的开发、编译、调试和运行而设计。该版本针对64位架构,确保了在处理...
多版本兼容JAR允许库开发者在同一个JAR文件中包含针对不同Java版本的实现。这使得库可以利用新版本的功能,同时保持对旧版本的兼容。 4. **接口私有方法 (Interface Private Methods)** 在Java 9中,接口可以拥有...
WindowBuilder是Eclipse IDE中的一个强大工具,专用于简化Swing和 SWT(Java窗口小部件工具包)应用程序的开发。1.9.3版本的WindowBuilder提供了对这些框架的直观图形化界面,允许开发者通过拖放组件来创建用户界面...
SVN1.9 中文手册,来自官方安装包
JFinal 是一个基于Java语言的轻量级Web开发框架,其核心设计理念是"约定优于配置",致力于打造快速、高效的开发体验。在JFinal 1.9 版本中,开发者可以感受到更为优化的性能和丰富的功能支持。 1. **JFinal 框架...
标题中的“window php7.1 amqp 1.9 64位”指的是在Windows操作系统上,用于PHP 7.1版本的一个名为AMQP(Advanced Message Queuing Protocol)的扩展库,版本为1.9,并且是适用于64位系统的。AMQP是一种开放的标准...
在Windows应用程序开发中,这类控件允许程序员为用户提供一个功能强大的编辑环境,支持诸如字体变化、颜色设定、图像插入、表格创建等多样化的文本编辑功能。在本文中,我们将深入探讨"richview1.9"及其在IT领域的...
`TortoiseSVN-1.9.5.27581-x64-svn-1.9.5.msi`是TortoiseSVN的安装文件,TortoiseSVN是一款流行的Subversion客户端,它作为一个Windows Shell接口集成到操作系统中,使得用户可以直接通过文件资源管理器进行版本控制...
在IT行业中,串行通信是设备间进行数据传输的一种重要方式,尤其在嵌入式系统、工业控制等领域中广泛应用。Docklight RS232 Terminal是一款专业的串口调试软件,其RS232 Monitor功能使得用户能够轻松监控和分析串口...