Objective C 语言 处理窗口间数据共享

Objective-C阿木 发布于 15 天前 5 次阅读


Objective-C 语言在 iOS 和 macOS 开发中广泛使用,而窗口间数据共享是应用程序开发中的一个常见需求。在 Objective-C 中,有多种方式可以实现窗口间的数据共享,包括使用全局变量、通知(Notification)、代理(Delegate)和观察者(Observer)模式等。本文将围绕这些主题,通过代码示例来探讨如何在 Objective-C 中实现窗口间数据共享。

1. 全局变量

全局变量是一种最简单但最不推荐的方式来实现窗口间数据共享。因为它破坏了封装性,容易导致代码难以维护。

objective-c

// Global variable.h


@interface GlobalVariable : NSObject

@property (nonatomic, strong) NSString sharedData;

@end

// GlobalVariable.m


@implementation GlobalVariable

+ (instancetype)sharedInstance {


static GlobalVariable instance = nil;


static dispatch_once_t onceToken;


dispatch_once(&onceToken, ^{


instance = [[self alloc] init];


});


return instance;


}

@end

// Usage


GlobalVariable globalVar = [GlobalVariable sharedInstance];


[globalVar setSharedData:@"Shared Data"];


2. 通知(Notification)

通知是一种基于发布/订阅模式的机制,允许对象发布通知,其他对象可以订阅这些通知并响应。

objective-c

// Notification.h


import <Foundation/Foundation.h>

// Define a notification name


NSString const MyNotificationName = @"MyNotification";

@interface NotificationManager : NSObject

+ (void)postNotification:(NSNotification )notification;

@end

// NotificationManager.m


@implementation NotificationManager

+ (void)postNotification:(NSNotification )notification {


[[NSNotificationCenter defaultCenter] postNotification:notification];


}

@end

// Usage


NSNotification notification = [NSNotification notificationWithName:MyNotificationName object:nil];


[NotificationManager postNotification:notification];

// Another window


- (void)notificationReceived:(NSNotification )notification {


if ([notification.name isEqualToString:MyNotificationName]) {


NSString sharedData = notification.object;


NSLog(@"Received shared data: %@", sharedData);


}


}


3. 代理(Delegate)

代理模式是一种设计模式,其中一个对象(代理)代表另一个对象(委托)执行某些操作。

objective-c

// Delegate.h


@protocol MyDelegate <NSObject>

- (void)sharedDataReceived:(NSString )sharedData;

@end

// Delegate.m


@interface MyDelegate : NSObject <MyDelegate>

@end

@implementation MyDelegate

- (void)sharedDataReceived:(NSString )sharedData {


NSLog(@"Received shared data: %@", sharedData);


}

@end

// Usage


MyDelegate delegate = [[MyDelegate alloc] init];


[delegate sharedDataReceived:@"Shared Data"];


4. 观察者(Observer)模式

观察者模式是一种设计模式,其中一个对象(主题)维护一个观察者列表,当主题状态改变时,通知所有观察者。

objective-c

// Observer.h


@interface Observer : NSObject

@property (nonatomic, weak) id<ObserverDelegate> delegate;

- (void)notifyDelegateWithSharedData:(NSString )sharedData;

@end

// Observer.m


@implementation Observer

- (void)notifyDelegateWithSharedData:(NSString )sharedData {


if (_delegate) {


[_delegate sharedDataReceived:sharedData];


}


}

@end

// ObserverDelegate.h


@protocol ObserverDelegate <NSObject>

- (void)sharedDataReceived:(NSString )sharedData;

@end

// Usage


Observer observer = [[Observer alloc] init];


MyDelegate delegate = [[MyDelegate alloc] init];


observer.delegate = delegate;


[observer notifyDelegateWithSharedData:@"Shared Data"];


5. 总结

在 Objective-C 中,实现窗口间数据共享有多种方式,包括全局变量、通知、代理和观察者模式。每种方式都有其适用场景和优缺点。全局变量简单但不可取,通知和代理模式适用于简单的数据共享,而观察者模式则提供了更灵活和可扩展的解决方案。

选择哪种方式取决于具体的应用场景和需求。在实际开发中,建议优先考虑封装性和可维护性,避免使用全局变量,并选择合适的模式来实现窗口间数据共享。