在我关于使用委托或UIControl事件的问题中,这是在Kendall Helmstetter Geln的回答中:
两者都是一个相同的负载 - 与代表你必须自己设置,然后记得在你被解除分配之前取消自己.你必须对通知做同样的事情,记得开始听,然后在你被解除分配之前取消订阅.
他们是什么意思,在取消分配之前取消订阅,取消自己的设定?我没有做过任何事情.有人可以解释它是什么以及如何做到这一点?
谢谢!!
如果你安装了多个版本的python(我目前有默认的2.5,安装了3.0.1,现在已经安装了2.6.2),它会自动放入内容/usr/local,并且还会调整路径以包含/Library/Frameworks/Python/Versions/theVersion/bin,但最重要的是什么时候/usr/local已经在PATH上了,所有已安装的版本(默认的2.5除外/usr/bin)都在那里?我删除了Python框架的路径从我的PATH中.bash_profile,我仍然可以输入"python -V" => "Python 2.5.1", "python2.6 -V" => "Python 2.6.2","python3 -V" => "Python 3.0.1".只是想知道为什么它把它放进去/usr/local,也改变了PATH.我做得很好吗?谢谢.
此外,2.6安装使它成为'当前',.../Python.framework/Versions/Current指向2.6.所以简单的'python'事情/usr/local/bin指向2.6,但它没关系,因为usr/bin第一个和同名的东西指向2.5东西..无论如何,2.5附带豹子,我安装3.0.1只是为了拥有最新版本(有一个dmg文件),现在我安装了2.6.2与pygame一起使用.
编辑:好的,这是我理解的方式.安装时,比方说,Python 2.6.2:添加了一堆符号链接/usr/local/bin,所以当#! /usr/local/bin/pythonpython脚本中有一个shebang时,它会运行,并且在/Applications/Python 2.6Python启动器中,默认应用程序运行.py文件,使用/usr/local/bin/pythonw,并/Library/Frameworks/Python.framework/Versions/2.6/bin创建并添加到路径的前面,因此which python将在那里获得python,并且#! /usr/bin/env pythonshebang将正确运行.
使用环境变量(如PATH)作为$ PATH或$ {PATH}有什么区别?
通常__init__方法似乎与此类似:
def __init__(self, ivar1, ivar2, ivar3):
self.ivar1 = ivar1
self.ivar2 = ivar2
self.ivar3 = ivar3
Run Code Online (Sandbox Code Playgroud)
有没有办法将参数转换为一个列表(不使用*args或**kwargs),然后使用setattr设置实例变量,参数名称和参数传递?也许可以对列表进行切片,例如,您需要至少将其切片,[1:]因为您不需要self.self.
(实际上我想它需要是一个字典来保存名称和值)
像这样:
def __init__(self, ivar1, ivar2, ivar3, optional=False):
for k, v in makedict(self.__class__.__init__.__args__): # made up __args__
setattr(self, k, v)
Run Code Online (Sandbox Code Playgroud)
谢谢!
回应未知的答案,我发现这个工作:
Class A(object):
def __init__(self, length, width, x):
self.__dict__.update(dict([(k, v) for k, v in locals().iteritems() if k != 'self']))
Run Code Online (Sandbox Code Playgroud)
要么
Class A(object):
def __init__(self, length, width, x):
self.__dict__.update(locals())
del self.__dict__['self']
Run Code Online (Sandbox Code Playgroud)
还不错..
甚至当我只使用基于Window的应用程序模板时,仪器(活动监视器)说我的应用程序的进程是使用8.14MB的真实内存!即使使用这种方法:
void report_memory(void) {
struct task_basic_info info;
mach_msg_type_number_t size = sizeof(info);
kern_return_t kerr = task_info(mach_task_self(),
TASK_BASIC_INFO,
(task_info_t)&info,
&size);
if( kerr == KERN_SUCCESS ) {
NSLog(@"Memory in use (in bytes): %u", info.resident_size);
} else {
NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
}
}
Run Code Online (Sandbox Code Playgroud)
它还是~8.14 MB!所以看来仪器是正确的,但为什么UIWindow会占用那么多内存?
所以我正在我的mac上学习x86_64 nasm程序集以获得乐趣.在hello world和一些基本的算术之后,我尝试从这个站点复制一个稍高级的hello world程序并将其修改为64位intel,但我无法摆脱这一个错误消息:hello.s:53: error: Mach-O 64-bit format does not support 32-bit absolute addresses.这是我用来汇编和链接的命令:nasm -f macho64 hello.s && ld -macosx_version_min 10.6 hello.o.这是相关的:
cmp rsi, name+8
Run Code Online (Sandbox Code Playgroud)
rsi是我在循环中用于索引的寄存器,name是为用户输入保留的四字,这是名称,到目前为止已经写入了.
这是代码的一部分(要查看其余部分,单击链接并转到底部,唯一的区别是我使用64位寄存器):
loopAgain:
mov al, [rsi] ; al is a 1 byte register
cmp al, 0x0a ; if al holds an ascii newline...
je exitLoop ; then jump to label exitLoop
; If al does not hold an ascii newline...
mov rax, 0x2000004 ; System call write = 4 …Run Code Online (Sandbox Code Playgroud) 我最近做了滑铁卢CCC,我觉得Haskell是回答这些类型问题的完美语言.我还在学习它.不过,我在输入方面有点挣扎.
这是我正在使用的:
import IO
import System.Environment
import System.FilePath
…
main = do
name <- getProgName
args <- getArgs
input <- readFile $
if not (null args)
then head args
else dropExtension name ++ ".in"
let (k:code:_) = lines input
putStrLn $ decode (read k) code
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在从命令行给定的文件路径中读取,或者从j1.in例如,如果调用此程序j1.hs并将其编译为j1.
我只对文件的前两行有兴趣,所以我已经使用模式匹配来获取这些线路,并将其绑定到k和code在这个例子.然后我读k作一个整数并将它和代码字符串传递给我decode输出的函数.
我想知道是否readFile将整个文件加载到内存中,这将是不好的.但后来我开始思考,也许是因为Haskell是懒惰的,它只会读取前两行,因为这就是后来要求的全部内容.我对吗?
此外,如果有任何代码示例可能更好或更具惯用性,请告诉我.
我正在使用这个实现maybeRead:
maybeRead :: (Read a) => String -> Maybe a
maybeRead = fmap fst . listToMaybe . filter (null . dropWhile isSpace . snd) . reads
Run Code Online (Sandbox Code Playgroud)
和我自己的getNum功能,它提示直到它获得有效输入:
getNum :: (Num a, Read a) => String -> IO a
getNum s = do
putStr s
input <- fmap maybeRead getLine
if isNothing input
then getNum s
else return $ fromJust input
Run Code Online (Sandbox Code Playgroud)
但是,如果我输入5.2它将其视为糟糕的输入 - 为什么?还有就是零个OCCURENCES Int并Integer在我的代码.我只是用Num,因为我想接受任何类型的号码.
如果我明确地称之为getNum "Enter a number: …
我理解数组如何衰减到指针.我明白,对于编译器,这个:
void foo(int *arg1);
Run Code Online (Sandbox Code Playgroud)
是100%相当于:
void foo(int arg1[]);
Run Code Online (Sandbox Code Playgroud)
一种风格应该优先于另一种吗?我希望保持一致,但我很难为两种决定辩护.
虽然int main(int argc, char *argv[])并且int main(int argc, char **argv)是相同的,但前者似乎更常见(如果我错了,请纠正我).
我正在写作vector.go我课程的一部分.它提供了三维vector结构和一些向量运算.
对于一般vector类型的对称性,我想提供一个scalar类型:
type scalar float64
Run Code Online (Sandbox Code Playgroud)
我喜欢这个,因为我没有理由每次都要指定我的标量的精度.它们是64位的事实是一个细节,我宁愿只指定一次.
唯一的问题是我知道这不像typedefC中那样.幕后似乎还有更多的事情发生.我的问题:这会产生任何开销吗?如果是的话,何时以及多少?当性能绝对至关重要时,我可以使用它吗?(假设我将取代的每次出现float64与scalar和转换文字,例如,scalar(1.0).)
haskell ×2
input ×2
iphone ×2
macos ×2
parameters ×2
python ×2
arrays ×1
assembly ×1
bash ×1
c ×1
c++ ×1
cocoa-touch ×1
delegates ×1
events ×1
file-io ×1
go ×1
io ×1
list ×1
mach-o ×1
nasm ×1
objective-c ×1
overhead ×1
parsing ×1
path ×1
pointers ×1
setattr ×1
shell ×1
terminal ×1
type-alias ×1
types ×1
typing ×1
x86-64 ×1