如何在这样的关系中避免内存泄漏?
@class Node;
@interface Node : NSObject {
Node *parent;
Node *child;
id object;
}
-(id)initWithObject:(id)anObject;
-(id)object;
-(void)setChild:(Node *)aNode;
-(void)setParent:(Node *)aNode;
@end
@implementation Node
-(id)initWithObject:(id)anObject {
if (self = [self init]) {
object = [anObject retain];
}
return self;
}
-(id)object {
return object;
}
-(void)setParent:(Node *)aNode {
[parent release];
parent = [aNode retain];
}
-(void)setChild:(Node *)aNode {
[child release];
child = [aNode retain];
[child setParent:self];
}
-(void)dealloc {
[child release];
[parent release];
[super dealloc];
}
@end
Run Code Online (Sandbox Code Playgroud)
Node *root = …Run Code Online (Sandbox Code Playgroud) 更新| 我已经使用面板上传了一个示例项目并在这里崩溃:http://w3style.co.uk/~d11wtq/BlocksCrash.tar.gz(我知道"选择..."按钮什么也没做,我没有实现它).
更新2 | 刚刚发现我甚至不必newFilePanel为了引起崩溃而调用任何东西,我只需要在声明中使用它.
这也会导致崩溃:
[newFilePanel beginSheetModalForWindow:[windowController window] completionHandler:^(NSInteger result) {
newFilePanel; // Do nothing, just use the variable in an expression
}];
Run Code Online (Sandbox Code Playgroud)
看来最后抛出到控制台的东西有时就是:"无法反汇编dyld_stub_objc_msgSend_stret.",有时这样:"无法访问地址0xa的内存".
我已经创建了自己的工作表(一个NSPanel子类),它尝试提供类似于NSOpenPanel/NSSavePanel的API,因为它将自身呈现为工作表并在完成时调用块.
这是界面:
//
// EDNewFilePanel.h
// MojiBaker
//
// Created by Chris Corbyn on 29/12/10.
// Copyright 2010 Chris Corbyn. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@class EDNewFilePanel;
@interface EDNewFilePanel : NSPanel <NSTextFieldDelegate> {
BOOL allowsRelativePaths;
NSTextField *filenameInput;
NSButton *relativePathSwitch;
NSTextField *localPathLabel;
NSTextField *localPathInput;
NSButton *chooseButton;
NSButton *createButton;
NSButton …Run Code Online (Sandbox Code Playgroud) 有了这个型号:
validates_presence_of :email, :message => "We need your email address"
Run Code Online (Sandbox Code Playgroud)
作为一个相当做作的例子.错误出现为:
Email We need your email address
Run Code Online (Sandbox Code Playgroud)
我如何自己提供格式?
我看了源代码,ActiveModel::Errors#full_messages它做到了这一点:
def full_messages
full_messages = []
each do |attribute, messages|
messages = Array.wrap(messages)
next if messages.empty?
if attribute == :base
messages.each {|m| full_messages << m }
else
attr_name = attribute.to_s.gsub('.', '_').humanize
attr_name = @base.class.human_attribute_name(attribute, :default => attr_name)
options = { :default => "%{attribute} %{message}", :attribute => attr_name }
messages.each do |m|
full_messages << I18n.t(:"errors.format", options.merge(:message => m))
end
end
end …Run Code Online (Sandbox Code Playgroud) 在 Emacs 中,使用 ruby 模式,我找不到阻止这种情况发生的方法:
foo = if something?
42
else
7
end
Run Code Online (Sandbox Code Playgroud)
当我们的内部会议是:
foo = if something?
42
else
7
end
Run Code Online (Sandbox Code Playgroud)
(同样适用于begin..end和case..when)。
另外,虽然这不那么麻烦,但我们的惯例case..when是缩进每个when.
case whatever
when foo
"a"
when bar
"b"
else
"c"
end
Run Code Online (Sandbox Code Playgroud)
我知道人们通常说你应该when与保持一致case,但这不是我们公司的惯例,所以有人知道如何定制它吗?我发现 ruby 模式的定制很少。我唯一真正能够自定义的是括号内的缩进。
在Ruby(1.9)中,数字总是被认为是精确的吗?我知道Ruby做了一些相当复杂的事情,因为你可以做一些疯狂的事情,比如要求1万亿到1万亿的力量,你会得到一个答案(在等待多个卫星计算之后).
在Scheme中,规范的一部分规定实现应指示实现的数字的内部表示是否"精确".例如,1/2总是精确的,1/3是精确的,0.3333是精确的等等.但是对精确数字的不精确数学运算的结果可能产生一个Scheme实现知道不精确的数字(由于浮动点精度).
(exact? (/ 0.33333 2))
=> #f
Run Code Online (Sandbox Code Playgroud)
那是假的,所以这不准确.
有没有办法在Ruby中推断出相同的信息?如果我总是在数学运算期间使用数字的Complex(或Rational)表示,它在Ruby中是否总是精确的,或者只是非常接近精确?
Complex("0.33333") / 2
Run Code Online (Sandbox Code Playgroud)
这是确切的,还是没有?
我试图了解如何打包用Clojure编写的命令行应用程序以进行分发.我不希望用户必须使用它java -jar myproject.jar arg1 arg2来运行该程序.PHP有一些名为"Phar"的文件,它们基本上是可执行的zip文件,因此它们包含一个告诉POSIX系统如何解压缩和运行它们的shebang.
我见过其他Clojure应用程序允许设置jar文件chmod +x然后直接执行.他们是如何做到这一点的?Uberjar似乎只是制作一个需要java -jar前缀的jar .
我有一个整数数组,可能会遇到数十万(或更多),按数字上升排序,因为这是它们最初堆叠的方式.
我需要能够查询数组,以>=尽可能高效地获取其首次出现数字输入的索引.我想知道如何在不考虑它的情况下做到这一点的唯一方法就是遍历测试条件的数组直到它返回true,此时我将停止迭代.但是,这是解决这个问题的最昂贵的解决方案,我正在寻找解决它的最佳算法.
我在Objective-C中进行编码,但我将在JavaScript中举例说明,以扩大能够响应的人的观众.
// Sample set
var numbers = [1, 7, 23, 23, 23, 89, 1002, 1003];
var indexAfter100 = getIndexOfValueGreaterThan(100);
var indexAfter7 = getIndexOfValueGreaterThan(7);
// (indexAfter100 == 6) == true
// (indexAfter7 == 2) == true
Run Code Online (Sandbox Code Playgroud)
将这些数据放入数据库以执行此搜索只是最后的解决方案,因为我很想看到某种算法在内存中快速解决这个问题.
我这样做有改变的数据结构,或以专卖店为我建立的阵列,因为我的计划已经由一个推每个号码一个到这个堆栈的附加数据结构的能力,所以我只是修改的代码将它们添加到堆栈中.在索引被添加到堆栈时搜索索引是不可能的,因为搜索操作将在事后经常以不同的值重复.
现在我正在考虑"B-Tree",但说实话,我不知道如何实现一个,在我开始计算之前,我想知道是否有一个很好的算法适合这个单一用例更好?
有了这个哈希:
{ "blog_namespace" : { "key" : "blog_post_1234",
"notice" : "Read the new blog post!" } }
Run Code Online (Sandbox Code Playgroud)
将它转换为Hash的最快方法是什么:
{ "blog_post_1234" : "Read the new blog post!" }
Run Code Online (Sandbox Code Playgroud)
?
我总是看到人们使用的巧妙组合map和merge等,但不能完全得到我的头周围的方式来做到这一点没有嵌套两个循环在一起.
我使用的所有项目都使用2个空格进行缩进,所以我设置了tab-stop-list.但是,对于特定的文件扩展名,我需要使用4个空格.
我正在尝试添加一个模式挂钩:
(setq tab-stop-list (number-sequence 4 200 4))
Run Code Online (Sandbox Code Playgroud)
哪个有效,除了它似乎影响所有缓冲区,而不仅仅是当前缓冲区.有没有办法让这个设置缓冲区本地?
我有一个用bash编写的项目.接口的一部分要求用户使用一层间接调用bash函数,如下所示:
require some_fun "arg 1" "arg 2"
Run Code Online (Sandbox Code Playgroud)
哪个执行some_fun "arg 1" "arg 2"(然后做一些额外的事情,因此它存在的原因).目前我只是在调用"$@"这一切,一切正常.
我现在需要将这些函数调用推迟到以后,并且无法在Bash中找到这样做的方法.实际上,我想"$@"在每次require调用时都进入堆栈,然后遍历该堆栈并执行参数,就像我当前的行为一样.这将需要多维数组,bash不支持,所以我正在尝试这个:
require() {
dep_num=${#SK_deps[@]}
dep_var="SK_dep_$dep_num"
eval $dep_var="$@"
SK_deps+=($dep_var)
}
Run Code Online (Sandbox Code Playgroud)
这基本上生成一个变量来存储"$ @"并将变量名放入$SK_deps.
然后我尝试迭代列表:
for dep_var in ${SK_deps[@]}
do
${!dep_name}
done
Run Code Online (Sandbox Code Playgroud)
但这似乎打破了引用的论点,所以:
require some_fun "arg 1" "arg 2"
Run Code Online (Sandbox Code Playgroud)
被解释为:
require some_fun arg 1 arg 2
Run Code Online (Sandbox Code Playgroud)
没有引号.
有没有办法做我想做的事情?使用"$*"也会导致报价定位丢失.感觉应该有一种方法可以在Bash中执行此操作,而不会使用sed/awk进行攻击.