我对Mac和iPhone上的UI编程相当陌生,而且我遇到了一些让我感到困惑的事情.
UIViewController有3个方法,涉及它的初始化及其视图:
我希望这些按照上面的顺序发生.第一个UIViewController由其他一些对象分配,然后立即调用init(或其他一些init方法,如initWithStyle).
只有在初始化对象后,我才会期望它调用自己的loadView函数,之后视图加载后会调用viewDidLoad委托方法.
例如,这不会发生:
@implementation UIViewControllerSubclass
- (id)init {
NSLog(@"0");
if (self = [super init]) {
NSLog(@"1");
}
return self;
}
- (void)loadView {
[super loadView];
NSLog(@"2");
}
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"3");
}
@end
Run Code Online (Sandbox Code Playgroud)
生成控制台输出:
0
2
3
1
Run Code Online (Sandbox Code Playgroud)
因此,loadView和viewDidLoad方法不能进行委托调用,因为委托通常在调用[super init]之后设置,在 loadView和viewDidLoad运行之后调用(如上所示):
UIViewControllerSubClass *someViewController = [[UIViewControllerSubclass alloc] init];
[viewController setDelegate:self];
Run Code Online (Sandbox Code Playgroud)
如果我想运行以某种方式设置ViewController的代码,通知代理,如果代码驻留在init方法中?loadView现有的原因是否允许在适当的时候运行此类代码?
在我看来,我必须创建一个新的initWithDelegate方法,该方法在调用[super init] 之前设置委托ivar ,这是对的,还是我以错误的方式进行此操作?
提前致谢 :)
我刚开始在Mac上开发并且发现Cocoa是一个有用且周到的框架,但它的HTTP功能让我感到困惑.
我有一个NSURLConnection对象,使用HTTP GET方法从我的web服务器下载文件.NSURLConnect的异步连接非常好,我得到了很多反馈,我将每个块作为一个新的NSData对象接收,我可以用来在客户端自动重建文件,更重要的是,为用户提供进度报告:[myData length ].
然而,上传远没有那么整洁.您既可以在自己的线程中粘贴同步请求,也可以调用异步请求(我相信它会生成自己的线程),但是它们都没有为您提供任何有用的反馈.没有代表请求数据,甚至不知道何时发送数据.据推测,这限制了我的文件小于可用内存.
因此,我的问题是,使用Cocoa的HTTP POST文件上传是否有一个简单而优雅的解决方案,它提供了大量的反馈和逐个读取文件的能力,而不是一次性读取所有文件?或者我应该从低级网络功能编写自己的类?
谢谢!
我正在使用带有QItemDelegate子类的QTableView来控制tableview的单元格的外观.
每个单元显示外部连接设备的名称和状态,并且可以同时连接多达100个设备.
每个设备的名称和类型基本上是静态的,很少更新(可能每小时一次),但每个单元需要显示设备输入的实时值,我目前每50毫秒轮询一次.此值显示为由TableView提供给Delegate :: paint()方法的painter绘制的基本条形图.
每秒更新我的模型20次的问题是每次重绘整个表,这是非常低效的.将绘制方法限制为仅绘制条形图显示,大部分CPU时间专用于在每个单元格而不是图形上绘制名称,状态和关联图像.
我需要找到一种方法来定期更新每个单元格的图形而不重新绘制单元格,但我无法弄清楚如何做到这一点.
实现这一目标的最有效方法是什么?
编辑:图片附加到帮助.
Image代表QTableView中的10个传感器.数字,名称和状态几乎是静态的,几乎从不更新."传感器值"文本旁边的条形图每50ms更新一次.我只想绘制这个条,而不是文本,状态和单元格背景.状态指示灯和背景是复杂的图像,因此比简单地绘制和填充矩形需要更多的CPU时间.

objective-c ×2
c++ ×1
cocoa ×1
cocoa-touch ×1
http ×1
iphone ×1
macos ×1
performance ×1
qt ×1
upload ×1