小编Jon*_*ing的帖子

使用块保留`self`循环

我担心这个问题非常基本,但我认为这与很多进入数据块的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)?

memory-management objective-c objective-c-blocks

166
推荐指数
5
解决办法
6万
查看次数

Objective-C类 - >字符串如:[NSArray className] - > @"NSArray"

我试图从类对象本身获取类的字符串名称.

// For instance
[NSArray className]; // @"NSArray"
Run Code Online (Sandbox Code Playgroud)

我发现object_getClassName(id obj)但是需要将一个实例传递给它,在我的情况下这是不必要的工作.

那么如何从类对象中获取字符串,而不是实例呢?

reflection metaprogramming objective-c objective-c-runtime

128
推荐指数
1
解决办法
6万
查看次数

NSPredicate:按NSDate属性的日期过滤对象

我有一个带有NSDate属性的Core Data模型.我想白天过滤数据库.我认为解决方案将涉及一个NSPredicate,但我不知道如何将它们放在一起.

我知道如何比较NSDate使用NSDateComponents和的两天的日子NSCalendar,但是如何用一个NSPredicate

也许我需要在我的NSManagedObject子类上创建一个类别,它可以返回只有年,月和日的裸日期.然后我可以比较一下NSPredicate.这是你的推荐,还是有更简单的东西?

core-data objective-c nsdate nspredicate nsfetchedresultscontroller

122
推荐指数
6
解决办法
8万
查看次数

NSString:plist中的换行符

我正在写一个属性列表,在我的应用程序的资源包中.NSStringplist中的对象需要在其中包含换行符.我试过了\n,但那不起作用.如何在plist中的字符串中添加换行符?

谢谢.

iphone plist nsstring

50
推荐指数
3
解决办法
2万
查看次数

函数指针作为C结构的成员

我有一个如下结构,带有一个指向名为"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中实现基本的面向对象系统的一个实验,但我没有很多经验处理指针的经验.感谢你给与我的帮助.

c pointers function

44
推荐指数
3
解决办法
11万
查看次数

强制iphone应用程序以编程方式重新启动

当我按下Logout按钮时,我试图让我的iPhone应用程序以编程方式重新启动.

有没有人有代码样本分享?我已经读过可以通过修改main.m文件但找不到与此相关的任何代码.

任何帮助,将不胜感激.

iphone objective-c application-restart ios4

44
推荐指数
5
解决办法
7万
查看次数

在Haskell中对无限列表中的术语进行惰性求值

我很好奇无限列表的运行时性能,如下所示:

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做了一些缓存来防止多次评估?

haskell lazy-evaluation

41
推荐指数
3
解决办法
3378
查看次数

为什么要将NSObject的协议添加到协议实现中

我一直在看到一些类似于以下内容的代码:

@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)

只是好奇逻辑是什么.

iphone cocoa objective-c

31
推荐指数
3
解决办法
8291
查看次数

所有Haskell仿函数都是endofunctors吗?

我有点困惑,需要有人帮我.让我们概述一下我目前的理解:

Eendofunctor 在哪里,是一个A类别:

E : A -> A.
Run Code Online (Sandbox Code Playgroud)

由于Haskell中的所有类型和态射都属于该Hask类别,Haskell中的任何函子都不是一个endofunctorF : Hask -> Hask.

我有一种很好的感觉,我错了,并以某种方式过度简化了这一点,我希望有人告诉我,我是一个多么的白痴.谢谢.

haskell functor category-theory

30
推荐指数
3
解决办法
3270
查看次数

指向类成员的指针作为模板参数

是否可以使用非类型模板参数,它实际上是指向类成员的指针?我想要做的是如下:

struct Person {
  Dog dog;
};

template <?? ptr>
struct Strange {
  // ...
};

typedef Strange<&Person::dog> weird;
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的工作让我相信没有任何类似的可能,但我很好奇是否有人可以说不然.

c++ templates pointers member

29
推荐指数
1
解决办法
1万
查看次数