我知道可以通过解码从sel_getName返回的选择器名称来完成.
但是我可以在运行时获得任何其他更方便的预加载信息吗?
需要我写:
view.opaque = NO;
Run Code Online (Sandbox Code Playgroud)
对于透明backgroundColor或小于1的每个视图alpha?
从文档来看似乎如此:
预计不透明视图将使用完全不透明的内容填充其边界 - 也就是说,内容的alpha值应为1.0.如果视图不透明并且未填充其边界或包含完全或部分透明的内容,则结果是不可预测的.如果视图完全透明或部分透明,则应始终将此属性的值设置为NO.
但事实上,我从来没有这样做,很少看到其他人这样做,代码工作得很好.
如果事实证明我确实需要设置opaque到NO,是时候对我来说,挖掘出所有的恶意代码和纠正.
我当然读了博士,但我不太明白"设置任何部分和订购内容"的含义.
NSFetchedResultsController数据库指数外还需要其他一些指数?NSFetchedResultsController设置缓存时真正发生了什么?-performFetch:但看到时间从0.018秒(没有缓存)增加到0.023秒(带缓存).我也定时-objectAtIndexPath:,只有一个时间从0.000030(没有缓存)减少到0.000029(带有catch).换句话说,我想知道缓存何时(或不)提高性能和原因.
正如@Marcus在下面所指出的那样,"500个条目很小.核心数据可以处理它而没有人类明显的滞后.当你有成千上万的记录时使用缓存." 所以我认为很少有应用程序可以从使用缓存中受益.
通用字符名称不应指定短标识符小于00A0而不是0024($),0040(@)或0060(`)的字符,也不能指定D800到DFFF范围内的字符.
除了这种限制不再具有"普遍性"这一事实外,我无法想出这种限制的充分理由.谁知道背景故事?
看起来基于MOC的新队列与iOS 5中引入的嵌套MOC一起作为一种更简单,更清晰的并发模型,所以我现在很乐意使用它.但有几件事我不清楚:
mergePolicy还负责解决孩子MOC和家长建设部之间的冲突?NSString类似的方法-substringWithRange:和-rangeOfString:options:range:陈述:
要点:如果aRange的任何部分位于字符串末尾之外,则引发NSRangeException.
在我看来,range(string.length,0)超出了字符串的结尾.但是,[string substringWithRange:NSMakeRange(string.length, 0)]不会提高NSRangeException但返回空字符串.所以我不确定(string.length,0)是否是有效范围.
相比较而言,无论是[string substringWithRange:NSMakeRange(string.length + 1, 0)]和[string substringWithRange:NSMakeRange(string.length, 1)]将提高NSRangeException.但它们非常明显地超越了结束,而(string.length,0)似乎是一个关键点.
为什么直接使用CATransform3Dfortransform不行
let rotationAnimation1 = CABasicAnimation(keyPath: #keyPath(CALayer.transform))
rotationAnimation1.toValue = CATransform3DMakeRotation(.pi * 2, 0, 0, 1)
rotationAnimation1.duration = 1
Run Code Online (Sandbox Code Playgroud)
但用于CGFloat作品transform.rotation?
let rotationAnimation2 = CABasicAnimation(keyPath: "transform.rotation")
rotationAnimation2.toValue = CGFloat.pi * 2
rotationAnimation2.duration = 1
Run Code Online (Sandbox Code Playgroud)
这里是可以玩的游乐场。
不知道为什么这不起作用.我不能为新添加的子层执行隐式动画,直到有些人甚至触发它就像按下按钮或从另一个方法调用.下面的内容即使我认为我应该也没有动画.它只显示图层的"后"状态.
CAGradientLayer *newBar = [CAGradientLayer layer];
CGFloat barHeight = ((pair.amount.floatValue/self.model.maxModelValue.floatValue)*maxBarHeight);
newBar.bounds=R(0,0,self.barWidth,0);
newBar.anchorPoint=P(0, 1);
newBar.position=P((i*barSpacing), self.insideLayer.bounds.size.height);
newBar.backgroundColor=self.lowerColor.CGColor;
newBar.colors=[NSArray arrayWithObjects:(id)self.upperColor.CGColor, self.lowerColor.CGColor, nil];
newBar.cornerRadius=self.cornerRadius;
newBar.opacity=1.0;
[self.insideLayer addSublayer:newBar];
//animation line:
newBar.opacity=0.5;
Run Code Online (Sandbox Code Playgroud) 我将一个对象存储在一个NSDate键下NSDictionary.然后我得到另一个NSDate具有相同日期值并用它从中检索对象NSDictionary.令我惊讶的是,它又回来了nil.但是在我的调试会话中发现的内容让我更加震惊:
(lldb)po when
(NSDate*)$ 34 = 0x0f8be100 2012-05-11 21:08:37 +0000
(lldb)po [newTaskDict objectForKey:when]
(id)$ 36 = 0x00000000
(lldb)po [newTaskDict allKeys]
(id )$ 37 = 0x0f8c1650 <__ NSArrayI 0xf8c1650>(
2012-05-11 21:08:37 +0000
)
(lldb)po [[newTaskDict allKeys] lastObject]
(id)$ 38 = 0x0f8b5ff0 2012-05-11 21:08:37 + 0000
(lldb)p(int)[[[newTaskDict allKeys] lastObject] isEqual:when]
(int)$ 39 = 0
(lldb)po [[[newTaskDict allKeys] lastObject] class]
(id)$ 40 = 0x3f4496b0 __NSDate
(lldb) po [when class]
(id)$ 41 = 0x3f4496b0 …
我遇到了NSObjectInaccessibleException我不明白的:
*** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x8c40040 <x-coredata://85B02C1C-1FFC-4CBF-B7AC-EEA259115427/Event/p6>''
*** First throw call stack:
(
0 CoreFoundation 0x01aa15e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x018248b6 objc_exception_throw + 44
2 CoreData 0x0025733b _PFFaultHandlerLookupRow + 2715
3 CoreData 0x00256897 -[NSFaultHandler fulfillFault:withContext:forIndex:] + 39
4 CoreData 0x00256473 _PF_FulfillDeferredFault + 259
5 CoreData 0x002562c6 _sharedIMPL_pvfk_core + 70
6 CoreData 0x0025acd5 -[NSManagedObject(_PFDynamicAccessorsAndPropertySupport) _genericValueForKey:withIndex:flags:] + 85
7 CoreData 0x00294781 _PF_Handler_Public_GetProperty + 161
8 CoreData 0x00294685 …Run Code Online (Sandbox Code Playgroud) 我正在阅读编程Erlang 2E.在第17章的主动和被动套接字中,它说:
您可能认为对所有服务器使用被动模式是正确的方法.不幸的是,当我们处于被动模式时,我们只能等待来自一个套接字的数据.这对于编写必须等待来自多个套接字的数据的服务器毫无用处.
幸运的是,我们可以采用混合方法,既不阻塞也不阻塞.我们使用选项{active,once}打开套接字.在此模式下,套接字处于活动状态,但仅适用于一条消息.在控制进程发送消息后,它必须显式调用inet:setopts以重新启用下一条消息的接收.系统将阻止,直到发生这种情况.这是两全其美的.
相关代码:
% passive mode
loop(Socket) ->
?case? gen_tcp:recv(Socket, N) ?of??
{ok, B} ->?
... do something with the data ...?
loop(Socket);?
{error, closed}?
...?
?end?.
% once mode
loop(Socket) ->
?receive??
{tcp, Socket, Data} ->?
... do something with the data ...?
?%% when you're ready enable the next message??
inet:setopts(Sock, [{active, once}]),?
loop(Socket);?
{tcp_closed, Socket} ->?
...?
?end?.
Run Code Online (Sandbox Code Playgroud)
我没有看到两者之间有任何真正的区别.gen_tcp:recv在passive模式本质上是做同样的事情receive在once模式.once模式如何解决此passive模式问题: …