如何与整个项目共享一个对象?

时间:2011-10-01 11:49:15

标签: objective-c cocoa-touch oop

例如,如果我在课程中创建UILabel,我该如何在任何地方使用它?

我已经知道如何在两个班级之间分享。但是我需要在所有类中调用对象的值。有可能吗?

3 个答案:

答案 0 :(得分:1)

单身是你想要的吗?基本上,单例只是一个只返回相同实例的类,无论如何。这是一个网站,向您展示如何做到这一点。 http://funwithobjc.tumblr.com/post/3478903440/how-i-do-my-singletons

答案 1 :(得分:0)

最好的方法是将它写入临时文件文件夹,如下所示:

NSString *pathtmp = [NSTemporaryDirectory() stringByAppendingPathComponent:@"tmpString.txt"];
NSString *stringToWrite = [NSString stringWithFormat:@"%@",Label.text];
[stringToWrite writeToFile:pathtmp atomically:YES encoding:NSStringEncodingConversionExternalRepresentation error:nil];

并阅读:

NSString *pathtmp = [NSTemporaryDirectory() stringByAppendingPathComponent:@"tmpString.txt"];
NSString *stringToWrite = [NSString stringWithContentsOfFile:pathtmp encoding:NSStringEncodingConversionExternalRepresentation error:nil];

答案 2 :(得分:0)

你问过“我需要在所有课程中调用一个对象的值。这可能吗?”并提到了UILabel。

您应该避免在其他视图层组件上查看视图层组件。它创建耦合使得它(1)真的很难改变 - 简单的改变以不可预测的方式破坏代码的大部分区域(参见上面的参考spaggeti代码)和(2)难以测试,因为系统中没有层。

你应该研究MVC的原理。在MVC中,您有视图,控制器和模型。你应该尽量减少。多个视图和控制器可以在控制数据和业务逻辑的同一模型上运行。

模型是您对数据执行的数据和操作。让所有不同的视图都能解决这些数据,而不是互相攻击。

我建议创建一组模型类,并允许对该模型的公共访问。一个常见的模式是该类是单身。

所以,多个视图&控制器会这样做。

MyModel * model = [MyModel sharedInstance]; 然后可以对多个控制器进行操作。

这是一篇关于这个主题的好文章:http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

来自苹果的单身人士:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW32

希望有所帮助。