可以将AppDelegate作为实例变量UIViewController吗?喜欢@property (nonatomic, weak) AppDelegate *appDelegate;
为什么我问的是因为我需要经常访问它而不是这样做:
AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
[appDelegate doSomething];
Run Code Online (Sandbox Code Playgroud)
我可以:
[appDelegate doSomething]
我试图更好地理解操作和线程,并查看AFNetworking的AFURLConnectionOperation子类,例如,真实世界的源代码.
我目前的理解是当实例NSOperation被添加到操作队列时,队列等管理负责执行操作的线程.在苹果公司的文档,NSOperation它指出,即使子类返回YES的-isConcurrent操作将始终在一个单独的线程来启动(为10.6).
基于Apple在线程编程指南和并发编程指南中强大的语言,管理线程似乎最好留给内部实现NSOperationQueue.
但是,AFNetworking的AFURLConnectionOperation子类产生了一个新的NSThread,并且操作-main方法的执行被推送到此网络请求线程.为什么?为什么这个网络请求线程是必要的?这是一种防御性编程技术,因为该库旨在供广大受众使用吗?调试库的消费者是不是更麻烦?在专用线程上进行所有网络活动是否有(微妙的)性能优势?
(
在1月26日添加)在Dave Dribin 的博客文章中,他演示了如何使用NSURLConnection的具体示例将操作移回主线程.
我的好奇心来自Apple的线程编程指南中的以下部分:
保持你的线程合理繁忙.
如果您决定手动创建和管理线程,请记住线程占用宝贵的系统资源.您应该尽力确保为线程分配的任何任务都是合理的长寿和高效的.与此同时,您不应该害怕终止花费大部分时间闲置的线程.线程使用大量内存,其中一些是有线的,因此释放空闲线程不仅有助于减少应用程序的内存占用,还可以释放更多物理内存供其他系统进程使用.
在我看来,AFNetworking的网络请求线程没有"保持相当忙碌"; 它正在运行一个无限的while循环来处理网络I/O. 但是,请注意,这就是问题的关键 - 我不知道,我只是在猜测.
AFURLConnectionOperation对操作,线程(运行循环?)和/或GCD的具体问题的任何洞察或解构都将非常有利于填补我理解的空白.
objective-c nsoperation nsthread nsoperationqueue afnetworking
根据Apple关于NSOperation的文档,我们必须覆盖main非并发操作的start方法和并发操作的方法.但为什么?
通过这个问题,我想知道我是否理解Root View Controller的概念.
在iOS应用程序中,根视图控制器(RVC)是其视图在启动时添加到UIWindow应用程序的控制器,是不是真的?
[window addSubview:rvcController.View];
[window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)
现在,UIWindow还有一个rootViewController属性.运行上一段代码时,是否使用rvcController填充了该属性,还是必须明确设置它?
然后,在UINavigationController中,可以设置与入口点的先前RVC集不同的RVC.
在这种情况下,我第一次将一个控制器添加到navigationController堆栈(在其上推一个新的控制器),框架是否将该控制器设置为navigationController的RVC,或者我是否必须通过initWithRootViewController方法显式设置它?
我正在运行一个脉冲播放图标的功能:
- (void)pulsePlayIcon {
if ([self isPlaying]) {
return;
}
[[self videoView] playIcon].hidden = NO;
[[self videoView] playIcon].alpha = 1.0;
[UIView animateWithDuration:[self playIconPulseDuration]
delay:[self playIconPulseTimeInterval]
options:(UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse)
animations:^{
[[self videoView] playIcon].alpha = 0.8;
}
completion:^(BOOL completed) {}];
}
Run Code Online (Sandbox Code Playgroud)
这在iOS 5.0中非常有效,但在4.3中它会阻止UI.用户界面没有响应.我读到这是在iOS 4.0或更高版本(> = 4.0)中重复动画的建议方法.罪魁祸首似乎是UIViewAnimationOptionRepeat.你看到我犯的任何明显错误吗?
我UINavigationController在里面使用UITabBarController,我的导航控制器中的一个屏幕是一个UIImageView.当我想要全屏显示图像时,我必须隐藏导航栏和标签栏.我可以正确隐藏导航栏但是当我隐藏标签栏时,它会留下50px的空白区域.有什么建议吗?
uinavigationbar uitabbarcontroller uinavigationcontroller uitabbar ios
这是SO中已经回答的问题,但我无法在Apple文档中找到它.你能指出我正确的方向吗?
在以下主题中
在将对象传递给-performSelector之前,我是否必须保留一个对象:withObject:afterDelay:?
对performSelector的保留计数的影响:withObject:afterDelay:inModes
是调用performSelector的对象:withObject:afterDelay是否被NSRunLoop保留?
默认行为似乎如下:它保留接收器和参数.
我正在使用以下代码
[[self delegate] performSelector:@selector(tryToSendStoreData:) withObject:userData];
Run Code Online (Sandbox Code Playgroud)
哪里userData是自动释放的对象.
记录保留计数(我知道它可能无效)传入的数据会增加其保留计数.在委托上调用方法时,保留计数不等于1.
所以,我的问题是:我是否需要执行一些内存管理以避免泄漏或者我是否必须相信Apple的东西?在这里,我作为一个不可知论者说话,因为我找不到合适的文档.
先感谢您.
memory-management objective-c retain nsobject performselector
我刚刚在iOS7中发现了一个新的框架:JavaScriptCore.
它看起来很棒,但是如何访问运行时/上下文UIWebView?
我正在玩一点,Backbone.js而且Backbone.Marionette我想知道trigger和之间有什么区别triggerMethod.
特别是,有什么经验法则可以决定何时使用前者或后者?
例如,在我看来,事件对于DOM元素及其视图之间的通信非常有用.
triggerMethod在Marionette中用于更新级联的不同组件,例如布局将show方法调用给其子级(子级响应onShow).所以,对我而言,与调用直接方法相同.这是真的?
怎么样trigger?
提前谢谢你.
是否可以扩展NSDecimalNumber到符合Encodable & Decodable协议?
ios ×5
objective-c ×5
ios4 ×2
nsoperation ×2
afnetworking ×1
backbone.js ×1
cocoa-touch ×1
ios5 ×1
javascript ×1
marionette ×1
nsobject ×1
nsthread ×1
retain ×1
rootview ×1
swift ×1
swift4 ×1
uitabbar ×1
uiwebview ×1