我担心这个问题非常基本,但我认为这与很多进入数据块的Objective-C程序员有关.
我听到的是,由于块捕获作为const
副本在其中引用的局部变量self
,因此如果要复制该块,则在块内使用可能会导致保留周期.因此,我们应该使用__block
强制块直接处理self
而不是复制它.
__block typeof(self) bself = self;
[someObject messageWithBlock:^{ [bself doSomething]; }];
Run Code Online (Sandbox Code Playgroud)
而不仅仅是
[someObject messageWithBlock:^{ [self doSomething]; }];
Run Code Online (Sandbox Code Playgroud)
我想知道的是:如果这是真的,有没有办法可以避免丑陋(除了使用GC)?
我试图从类对象本身获取类的字符串名称.
// For instance
[NSArray className]; // @"NSArray"
Run Code Online (Sandbox Code Playgroud)
我发现object_getClassName(id obj)
但是需要将一个实例传递给它,在我的情况下这是不必要的工作.
那么如何从类对象中获取字符串,而不是实例呢?
我有一个带有NSDate
属性的Core Data模型.我想白天过滤数据库.我认为解决方案将涉及一个NSPredicate
,但我不知道如何将它们放在一起.
我知道如何比较NSDate
使用NSDateComponents
和的两天的日子NSCalendar
,但是如何用一个NSPredicate
?
也许我需要在我的NSManagedObject
子类上创建一个类别,它可以返回只有年,月和日的裸日期.然后我可以比较一下NSPredicate
.这是你的推荐,还是有更简单的东西?
core-data objective-c nsdate nspredicate nsfetchedresultscontroller
我正在写一个属性列表,在我的应用程序的资源包中.NSString
plist中的对象需要在其中包含换行符.我试过了\n
,但那不起作用.如何在plist中的字符串中添加换行符?
谢谢.
我有一个如下结构,带有一个指向名为"length"的函数的指针,该函数将返回chars成员的长度.
typedef struct pstring_t {
char * chars;
int (* length)();
} PString;
Run Code Online (Sandbox Code Playgroud)
我有一个函数来返回从指针到PString的字符长度:
int length(PString * self) {
return strlen(self->chars);
}
Run Code Online (Sandbox Code Playgroud)
我有一个函数initializeString(),它返回一个指向PString的指针:
PString * initializeString() {
PString *str;
str->length = &length;
return str;
}
Run Code Online (Sandbox Code Playgroud)
很明显,我在这里做了一些非常错误的指针,因为该str->length = &length
行在我的调试器中会产生一个EXC_BAD_ACCESS信号,就像返回strlen(self-> chars)一样.有没有人对这个问题有任何见解?
我特别希望能够让initializeString()函数返回指向PString的指针,并使用指向PString的指针作为输入的长度函数.这只是在C中实现基本的面向对象系统的一个实验,但我没有很多经验处理指针的经验.感谢你给与我的帮助.
当我按下Logout按钮时,我试图让我的iPhone应用程序以编程方式重新启动.
有没有人有代码样本分享?我已经读过可以通过修改main.m文件但找不到与此相关的任何代码.
任何帮助,将不胜感激.
我很好奇无限列表的运行时性能,如下所示:
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)
这将创建一个无限的斐波那契序列表.
我的问题是,如果我做以下事情:
takeWhile (<5) fibs
Run Code Online (Sandbox Code Playgroud)
fibs
评估列表中每个术语的次数是多少?似乎自从takeWhile
检查列表中每个项目的谓词函数后,fibs
列表将多次评估每个项目.前两个学期是免费的.当takeWhile
想要评估
(<5)
第3个元素时,我们将获得:
1 : 1 : zipWith (+) [(1, 1), (1)] => 1 : 1 : 3
Run Code Online (Sandbox Code Playgroud)
现在,曾经takeWhile
想要评估(<5)
第4个元素:fibs
将再次构造列表的递归性质,如下所示:
1 : 1 : zipWith (+) [(1, 2), (2, 3)] => 1 : 1 : 3 : 5
Run Code Online (Sandbox Code Playgroud)
当我们想要评估第4个元素的值时,似乎需要再次计算第3个元素.此外,如果谓词in takeWhile
很大,则表明函数正在做更多需要的工作,因为它多次评估列表中的每个前面的元素.我的分析在这里是正确的还是Haskell做了一些缓存来防止多次评估?
我一直在看到一些类似于以下内容的代码:
@protocol MyProtocol <NSObject>
// write some methods.
@end
Run Code Online (Sandbox Code Playgroud)
MyProtocol符合NSObject协议有什么特别的原因吗?如果你做的事情如下:
id <MyProtocol> foo; // foo here conforms to NSObject AND MyProtocol?
Run Code Online (Sandbox Code Playgroud)
只是好奇逻辑是什么.
我有点困惑,需要有人帮我.让我们概述一下我目前的理解:
E
endofunctor 在哪里,是一个A
类别:
E : A -> A.
Run Code Online (Sandbox Code Playgroud)
由于Haskell中的所有类型和态射都属于该Hask
类别,Haskell中的任何函子都不是一个endofunctor?F : Hask -> Hask
.
我有一种很好的感觉,我错了,并以某种方式过度简化了这一点,我希望有人告诉我,我是一个多么的白痴.谢谢.
是否可以使用非类型模板参数,它实际上是指向类成员的指针?我想要做的是如下:
struct Person {
Dog dog;
};
template <?? ptr>
struct Strange {
// ...
};
typedef Strange<&Person::dog> weird;
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的工作让我相信没有任何类似的可能,但我很好奇是否有人可以说不然.