小编bbu*_*bum的帖子

何时使用enumerateObjectsUsingBlock vs.

除了明显的差异:

  • 使用enumerateObjectsUsingBlock时,你既需要索引和对象
  • enumerateObjectsUsingBlock当你需要修改局部变量时不要使用(我错了,见bbum的答案)

enumerateObjectsUsingBlock普遍认为是好还是坏的时候for (id obj in myArray)也将工作?有哪些优点/缺点(例如性能或多或少)?

multithreading objective-c ios4 objective-c-blocks

150
推荐指数
4
解决办法
6万
查看次数

iOS Prefix.pch最佳实践

我见过很多开发人员在iOS项目的Prefix.pch中添加了各种便利宏.

您建议添加到iOS Prefix.pch文件中(或不建议)是什么?你的Prefix.pch是什么样的?

xcode objective-c pch ios

88
推荐指数
4
解决办法
4万
查看次数

73
推荐指数
4
解决办法
4万
查看次数

在数组中存储块

在Objective-C中,我知道块被认为是对象,所以我想知道是否可以将它们存储在数组中.这引出了一个问题,是阻塞第一类对象还是只是为了在对象之间传递它们而被视为对象?如果它们是第一类对象,那么它们不应该存储在数组中吗?

memory-management objective-c objective-c-blocks

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

类是在两者中实现的.将使用两者之一

我有一个项目,它具有依赖(通过CocoaPods安装)使用SocketRocket并从HeapAnalytics导入一个静态库.显然,HeapAnalytics库已经使用了SocketRocket.编译时没有错误,但在运行时收到以下内容:

Class SRWebSocket is implemented in both [path] and [path].
One of the two will be used. Which one is undefined.
Run Code Online (Sandbox Code Playgroud)

我不知道如何处理它,因为我看到的大多数解决方案都需要自己编译静态库来更改类名等,而且我无法访问源代码.

有什么建议?

objective-c objective-c-runtime ios socketrocket

36
推荐指数
2
解决办法
4万
查看次数

线程安全实例化单例

使用哪种同步方法来确保单例仍然是单例?

+(Foo*)sharedInstance
{
   @synchronized(self)
   {
      if (nil == _sharedInstance)
      {
         _sharedInstance = [[Foo alloc] init];
         ...
      }
   }
   return _sharedInstance;
}
Run Code Online (Sandbox Code Playgroud)

还是使用互斥?

#import <pthread.h>

static pthread_mutex_t _mutex = PTHREAD_MUTEX_INITIALIZER;

+(Foo*)sharedInstance
{
   pthread_mutex_lock(&_mutex);
   if (nil == _sharedInstance)
   {
      _sharedInstance = [[Foo alloc] init];
      ...
   }
   pthread_mutex_unlock(&_mutex);
   return _sharedInstance;
}
Run Code Online (Sandbox Code Playgroud)

嗯..对此有何评论?

singleton multithreading memory-management objective-c thread-safety

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

Objective-C - 使用C++进行桥接的缺点?

所以,今天我很无聊,并决定搞乱C++/Obj-C插值,我找到了一种方法来创建一个非常有趣的设置.

@protocol NSCPPObj <NSObject>

-(id) init;
-(id) initWithInt:(int) value;
-(int) somethingThatReturnsAValue;
-(void) doSomething;

@end

class NSCPPObj : objc_object {
public:    
    static Class cls();

    int iVar;

    NSCPPObj();
    NSCPPObj(int);

    int somethingThatReturnsAValue();
    void doSomething();
};
Run Code Online (Sandbox Code Playgroud)

如您所见,界面非常简单易懂.我们创建两个(几乎)相同的接口,一个用于C++对象,另一个用于Obj-C协议.

现在,我找到了一种方法来实现这一点,但是让自己好斗,这变得丑陋:

// NSCPPObj.mm
#import <objc/runtime.h>
#import <iostream>

#import "NSCPPObject.h"

Class NSCPPObj_class = nil;

__attribute__((constructor))
static void initialize()
{
    NSCPPObj_class = objc_allocateClassPair([NSObject class], "NSCPPObj", 0);

    class_addMethod(NSCPPObj_class->isa, @selector(alloc), imp_implementationWithBlock(^(id self) {
        return class_createInstance(NSCPPObj_class, sizeof(struct NSCPPObj));
    }), "@@:");

    class_addMethod(NSCPPObj_class, @selector(init), imp_implementationWithBlock(^(id self) {
        return self;        
    }), "@@:");

    class_addMethod(NSCPPObj_class, @selector(initWithInt:), imp_implementationWithBlock(^(id …
Run Code Online (Sandbox Code Playgroud)

c++ cocoa objective-c objective-c++ ios

25
推荐指数
1
解决办法
1697
查看次数

当runloop被阻止时,NSTimer不会触发

我刚刚完成我的应用程序和beta测试发现秒表部分的一个错误...秒表使用一个nstimer进行计数并有一个用于存储圈数的表,但是当滚动表圈时手表停止或暂停并没有弥补失去的时间.

通过使用以下方式消除了停滞:

startingTime = [[NSDate date] timeIntervalSince1970];
Run Code Online (Sandbox Code Playgroud)

计算经过的时间.

但是我仍然使用NSTimer来触发每0.1秒,这意味着滚动仍然会使定时器停止,即使经过的时间最终会正确更新...并且将它与Apple秒表进行比较它让我想知道是否秒表有一个单独的线程,仅用于计算经过的时间.有谁知道这是怎么做的?

现在,使用Epoch以来的时间在某种意义上运作良好,但它使启动,停止和重新启动秒表的问题复杂化

当手表停止时,时间被存储并用于计算手表重新启动时的偏移量,但似乎有一些延迟时间,并且当手表重新启动时,时间会明显跳跃.

任何对根本原因或解决方案的想法都将非常感激.

cocoa nsdate nstimer

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

在Objective-C中,为什么增加4而不是1?

在Objective-C中,我有一个简单的代码块,每次按下按钮时都会递增一个计数器.我的日志,甚至是界面的更新,都显示增量为4而不是1.这只是我格式化的显示问题(我正在使用%d)或其他我错过的东西?我的猜测在于"%d",但我是Objective-C的新手,并不确定.(注意,我也试过"counter + = 1;",结果相同.

int counterValue = 0;
NSLog(@"Count at init: %d",counterValue);
...

-(IBAction)pushButton { 
    NSLog(@"Count (Pre-Push) = %d",counterValue);
    counterValue++;
    NSLog(@"Count (Post-Push) = %d",counterValue);
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

2010-02-20 18:39:39.125 My App[37536:207] Count at init:  0
2010-02-20 18:39:39.845 My App[37536:207] Count (Pre-Push) = 0
2010-02-20 18:39:39.846 My App[37536:207] Count (Post-Push) = 4
2010-02-20 18:39:40.165 My App[37536:207] Count (Pre-Push) = 4
2010-02-20 18:39:40.166 My App[37536:207] Count (Post-Push) = 8
2010-02-20 18:39:40.727 My App[37536:207] Count (Pre-Push) = 8
2010-02-20 18:39:40.728 My App[37536:207] Count (Post-Push) …
Run Code Online (Sandbox Code Playgroud)

iphone xcode objective-c

18
推荐指数
1
解决办法
2300
查看次数

废弃内存与内存泄漏有什么区别?

两者完全相同,只是"废弃的内存"指的是泄漏的整个对象图而不是单个对象.对?

memory-leaks memory-management objective-c ios abandoned-memory

12
推荐指数
2
解决办法
1828
查看次数