如果您在 Objective-C 样式块中捕获对 ARC 下的强引用self,则需要使用__weak指针来避免 ARC“保留周期”问题。
// Right way:
- (void)configureBlock {
XYZBlockKeeper * __weak weakSelf = self;
self.block = ^{
[weakSelf doSomething]; // capture the weak reference
// to avoid the reference cycle
}
}
Run Code Online (Sandbox Code Playgroud)
我真的不知道保留周期是什么,但这个答案对此进行了一些描述。我只知道你应该__weak对 Objective-C 风格的块使用指针。请参阅捕获 self 时避免强引用循环。
self但我的问题是,在 C++ 块下捕获时是否需要创建弱指针<functional>?
- (void)configureBlock {
self.block = [self](){
[self doSomething]; // is this ok? It's not an objective C block.
}
}
Run Code Online (Sandbox Code Playgroud) 我正在创建这个多线程C++程序,并且在发布模式下编译时,我发现了这种类型的错误(对象仍为空),即它看起来像缺少volatile标记.
但问题是,由于第二个工作线程涉及各种对象,这意味着程序中几乎所有东西都是易变的.
我不知道是否有一种方法来关闭优化在苹果LLVM编译器,创造了该漏洞volatile的关键字是专门设计来解决.这些错误不会出现在调试模式下(因为优化已关闭).放在volatile任何地方基本上意味着volatile在每个成员函数之后加入每个类,并volatile在每个共享变量声明之前添加.
我想我宁愿失去volatile优化而不是冒险出现虚假的错误因为我忘了标记某些东西volatile.
嗯.而不是"defanging"输入或使用某种正则表达式删除标签,将用户的东西转储到一个<textarea>?
例如,假设有一个PHP页面执行以下操作:
echo '<textarea>';
echo $_GET['whuh_you_say'] ;
echo '</textarea>';
Run Code Online (Sandbox Code Playgroud)
通常这很容易受到xss攻击,但是textarea,所有脚本标签只会显示为,<script>并且不会被执行.
这不安全吗?
我正在进行代码审查,我看到将单引号字符串赋值给枚举值:
enum
{
Option_1 = 'a',
Option_2 = 'b'
} ;
虽然这使得代码稍微可读(尽管枚举的含义应该与num的名字相当),但对我来说这看起来很愚蠢.
我不知道你可以这样做,在研究之后,我可以看到发生的一切都是你正在使用的"字符"的二进制值被抛入int.
在实践中有没有其他人这样做?或者这是一个不好的做法?
在我的编辑器(notepad ++)中用Python脚本编辑模式,一行
## is this a special comment or what?
变为与正常#comment不同的颜色(黄色).
##评论与#comment有什么特别之处?
我正在从数组中删除一个项目(如果存在).
我可以想到两种方法来做到这一点
# x array, r item to remove if r in x : x.remove( r )
try : x.remove( r ) except : pass
时间显示尝试/除外的方式可以更快
(有时我会得到:)
1.16225508968e-06 8.80804972547e-07 1.14314196588e-06 8.73752536492e-07
import timeit runs = 10000 x = [ '101', '102', '103', '104', '105', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', '111', '112', '113', 'x', 'y', 'z', 'w', 'wwwwwww', 'aeiojwaef', 'iweojfoigj', 'oiowow', 'oiweoiwioeiowe', 'oiwjaoigjoaigjaowig', ] r = 'a' code1 =""" x …
我似乎无法根据时间戳选择一些东西.行为有点奇怪,<和=符号似乎并不意味着我期望它们.
""" A site message """ class Message( db.Model ) : # from/to/ a few other fields subject = db.StringProperty() body = db.Text() # this is the field i'm trying to use sent = db.DateTimeProperty( auto_now_add=True )
当我写GQL查询时
select * from Message where sent = '2009-09-14 01:00:02.648000'
(在数据存储区中有一条准确显示该时间戳的消息)
它没有给我任何回报.
如果我试试
select * from Message where sent < '2009-09-14 01:00:02.648000'
它只是给了我所有这些.当我尝试>符号时,它只是再次给我一个.
这里发生了什么,我如何根据时间戳选择?
使用谷歌appengine和django.
每当我在模型中有一个db.ReferenceProperty()时:
class User( db.Model ) :
name = db.StringProperty()
avatar = db.ReferenceProperty( dbImage )
Run Code Online (Sandbox Code Playgroud)
因此,在推出用户页面时,在django模板中我无法做到
<div>
<span>{{ user.name }}</span>
<span>{{ user.avatar.key() }}</span>
</div>
Run Code Online (Sandbox Code Playgroud)
我现在正在做的是在数据输出到看起来像的模板之前编写一些python代码
user.avatarsKey = user.avatar.key()
Run Code Online (Sandbox Code Playgroud)
然后
<div>
<span>{{ user.name }}</span>
<span>{{ user.avatarsKey }}</span>
</div>
Run Code Online (Sandbox Code Playgroud)
消除函数调用.我不喜欢这样,因为我必须在很多地方这样做,并且它开始变得杂乱无章.有没有办法从模板内部调用db对象的.key()方法?
每次我做一个git diff,尽管自第一个提交以来很多提交,它继续给我这些旧的更改,这些更改很久以前用于文件删除.
我在提交中删除了大约7个提交之前的整个文件夹,并且仍然在分支或合并上,git就像删除是新的一样.做git diff静止显示已删除文件的每一行都"刚被删除",好像这是新的,但我删除了很多提交前.
这是怎么回事?
我之前对一个类进行了模板化,并且由于这种模板化,所有接收这种新模板类型对象的类都需要模板化,即使模板化完全无关紧要.
所以:
class Shape为基类class Sphere,Cube,ModelShape包含一个MeshMesh 现在已经被模板化以允许VertexBuffer基本上具有参数化类型:所以:
template <typename T> struct Mesh
{
VertexBuffer<T> verts ; // Mesh needs to be templated to allow
// the vertex buffer to be templated as well
} ;
Run Code Online (Sandbox Code Playgroud)
所以现在包含Mesh(基类Shape)的类也需要模板化:
template <typename T> class Shape
{
Mesh<T>* mesh ;
} ;
Run Code Online (Sandbox Code Playgroud)
而现在,所有代码的任何位置的方法需要被模板以及,即使在没有办法的模板化影响的代码(即代码有没有业务往来的顶点类型网格构件的)
例如,八叉树节点:
// An octree node
template <typename T> …Run Code Online (Sandbox Code Playgroud)