正如标题所说,Array vs NSArray与[AnyObject]之间有什么区别?
此外,最推荐的方法是什么.我的意思是推荐,最简单的实现是什么.谢谢.
题
是否可以设置Xcode/Interface Builder的实时渲染执行的断点和调试代码?也就是说,我使用IBDesignable和IBInspectable属性来影响视图,因为它在界面构建器故事板中呈现,并且希望能够调试"IB崩溃"错误.我不记得WWDC会话中的这个,除了关于prepareForInterfaceBuilder的部分.
上下文
我最近开始看到一些错误报告在尝试渲染我的代码时IB崩溃了.我最终将它追溯到layoutSubviews中的一个无辜的代码行,在我的一个视图中,它是从故事板链接的.IB在渲染实时视图时的特定问题,在设置所有视图的子视图属性之前称为layoutSubviews(这本身就是一个单独的问题).这与模拟器和设备形成对比,其中视图是在第一次调用layoutSubviews之前设置的.不过长话短说,它涉及分散一堆文件以找到违规的变化.可以说,如果可以设置断点并捕获崩溃,我本可以快速找到问题.
有没有人想出如何调试和/或一般陷阱这些问题,或者该访问还没有?
让我们考虑这个例子:
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var names = ["Vegetables": ["Tomato", "Potato", "Lettuce"], "Fruits": ["Apple", "Banana"]]
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier:"test")
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
return ???
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int{
return names.count
}
func sectionIndexTitlesForTableView(tableView: UITableView) -> [AnyObject]!{
return ???
}
func tableView(tableView: UITableView,
titleForHeaderInSection section: Int) -> String?{
return ????
} …
Run Code Online (Sandbox Code Playgroud) 我已经读过某个地方,在一个具有指针的语言中,编译器无法在编译时完全决定是否所有指针都被正确使用和/或有效(参考活动对象)由于各种原因,因为那样做基本上构成解决停止问题.直觉上这并不奇怪,因为在这种情况下,我们能够在编译期间推断出程序的运行时行为,类似于此相关问题中所述的内容.
但是,据我所知,Rust语言要求指针检查完全在编译时完成(没有与指针相关的未定义行为,至少是"安全"指针,并且没有"无效指针"或"空指针"运行时例外).
假设Rust编译器无法解决暂停问题,那么谬误在哪里呢?
<'lifetime_ident>
语法的注释)?在这种情况下,这是否意味着指针/内存安全保证不是100%,仍然依赖程序员编写正确的代码?{ "pointer", "safety", "guaranteed", "compile-time" }
.在这些评论用户@Deduplicator坚持认为,严格别名规则允许通过一个不兼容的类型的访问,如果任一混叠或混叠指针的是一个指针到字符的类型(合格或不合格,符号或无符号char *
).所以,他的断言基本上都是这两个
long long foo;
char *p = (char *)&foo;
*p; // just in order to dereference 'p'
Run Code Online (Sandbox Code Playgroud)
和
char foo[sizeof(long long)];
long long *p = (long long *)&foo[0];
*p; // just in order to dereference 'p'
Run Code Online (Sandbox Code Playgroud)
符合并定义了行为.
但是,在我的阅读中,它只是第一种有效的形式,也就是说,当别名指针是指向char的指针时; 但是,在另一个方向上不能这样做,即当别名指针指向不兼容的类型(字符类型除外)时,别名指针为a char *
.
所以,上面的第二个片段会有未定义的行为.
情况怎样?它是否正确?为了记录,我已经阅读了这个问题和答案,并且接受的答案明确指出了这一点
规则允许例外
char *
.它总是假设char *
其他类型别名.但是这不会起作用,没有假设你的结构别名为chars的缓冲区.
(强调我的)
func avg(numbers: Int...) -> Double {
var sum = 0;
var i = 0;
for number in numbers {
sum += number;
++i;
}
return sum / i;
}
avg(42, 597, 12);
Run Code Online (Sandbox Code Playgroud)
该行return sum / i
导致错误Could not find an overload for '/' that accepts the supplied arguments.
我应该在这做什么?
我在iOS中比较新鲜,我想知道什么时候我们应该copy
在一个属性中使用,例如
@property (nonatomic, retain) NSString* name;
Run Code Online (Sandbox Code Playgroud)
VS
@property (nonatomic, copy) NSString* name;`
Run Code Online (Sandbox Code Playgroud)
retain
和之间有什么区别,什么copy
时候应该使用一个而不是另一个?
输入代码时,Emacs会突出显示匹配的支架或支架.使用现有代码,如果我突出它的双胞胎,有没有办法要求它突出显示匹配的支架或支架?
在处理编译器错误和警告时,我经常尝试进行健全性检查.我通常在编码之前输入两个大括号,然后插入代码,但在调试时注释掉代码时,有时会无意中注释掉一个大括号.
处理与Emacs匹配的支架和支架的任何建议?
操作系统主要是Linux/Unix,但我也在OS X和Windows上使用它.
我已经在GitHub,parse.com和其他地方检查了很多次语法,没有任何运气.问题是当我为PFObject调用saveInBackgroundWithBlock时,我收到以下错误:
无法使用类型'((Bool,NSError) - > Void)的参数列表调用'saveInBackgroundWithBlock'
我正在使用Xcode 6.3 beta 2.所有框架都加载到项目中(包括Bolts&Parse,但不是由parse.com ParseCrashReporting和ParseUI提供),<Parse/Parse.h>
甚至<Bolts/Bolts.h>
是通过Bridge Header引入的.
var score = PFObject(className: "score")
score.setObject("Rob", forKey: "name")
score.setObject(95, forKey: "scoreNumber")
score.saveInBackgroundWithBlock {
(success: Bool!, error: NSError) -> Void in
if success == true {
println("Score created with ID: \(score.objectId)")
} else {
println(error)
}
}
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
我查看了以下相关的问题,但似乎没有一个问题可以解决我的确切问题:一,二,三.
我正在编写一个集合,其中存储了元素(键值对)以及一些簿记信息:
struct Element {
Key key;
Value value;
int flags;
};
std::vector<Element> elements;
Run Code Online (Sandbox Code Playgroud)
(为简单起见,假定两个Key
和Value
是标准布局的类型.收集将不会与任何其他类型的反正使用).
为了支持基于迭代器的访问,我编写了迭代器,它们分别覆盖operator->
并向operator*
用户返回键值对的指针和引用.但是,由于集合的性质,永远不允许用户更改返回的密钥.出于这个原因,我已经宣布了一个KeyValuePair
结构:
struct KeyValuePair {
const Key key;
Value value;
};
Run Code Online (Sandbox Code Playgroud)
我operator->
在迭代器上实现了这样的:
struct iterator {
size_t index;
KeyValuePair *operator->() {
return reinterpret_cast<KeyValuePair *>(&elements[index]);
}
};
Run Code Online (Sandbox Code Playgroud)
我的问题是:这是使用reinterpret_cast
定义明确,还是调用未定义的行为?我试图解释标准的相关部分并检查有关类似问题的问题的答案,但是,我没有从中得出明确的结论,因为...:
key
和value
),这些成员只有不同的const
资格;T
并且cv T
是布局兼容的,但它也没有说明相反的情况; 此外,它要求它们具有相同的表示和对齐要求;reinterpret_cast
共享一个公共初始序列的ed指针到结构,没有类似的明确保证. - …ios ×5
swift ×4
c ×2
c++ ×2
pointers ×2
c++11 ×1
cocoa ×1
coding-style ×1
collections ×1
emacs ×1
iphone ×1
linux ×1
macos ×1
objective-c ×1
rust ×1
uitableview ×1
xcode ×1