小编bbu*_*bum的帖子

调试NSNotificationCenter问题的方法?

我发布的通知中有一些问题:

[[NSNotificationCenter defaultCenter] postNotificationName:@"MobileProviderChanged" 
                                                    object:self.selectedProviderID];
Run Code Online (Sandbox Code Playgroud)

不被我的观察者困住:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(onProviderChanged:) 
                                             name:@"MobileProviderChanged"
                                           object:nil];
Run Code Online (Sandbox Code Playgroud)

完全相同的观察者在不同的ViewController中正常工作.

有关调试此方法的任何提示,以查看实际发布到defaultCenter的消息是什么?

谢谢.

iphone debugging objective-c

8
推荐指数
1
解决办法
1857
查看次数

将NSString转换为iigned应用程序的unsigned char*

我试图将NSString转换为iigned应用程序的unsigned char*.我是这个目标C和iphone应用的新手,所以请帮忙.是否有任何api可以帮助将NSString转换为unsigned char*.

谢谢,KamalBhr

iphone nsstring

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

我发布了多少次分配或保留的对象?

我正在制作iPhone游戏.我想释放已分配或保留的所有对象.在dealloc我发布所有这些对象的函数中,但后来我意识到有时候我还没有分配对象时最终释放对象.所以我想retainCount在发布它之前我需要检查它是否大于零.

我的问题是:

我只是检查是否retainCount大于零,然后释放它?

if([bg retainCount]!=0)
{
  [bg release];
}
Run Code Online (Sandbox Code Playgroud)

要么

我应该多次发布它 retainCount

while([bg retainCount]!=0)
{
  [bg release];
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

iphone memory-management retain cocos2d-iphone retaincount

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

文字语法的内存管理

  1. 创建数组变量有三种模式:

    • NSArray *array = @[@0, @1];

    • NSArray *array = [NSArray arrayWithObjects:@0, @1, nil];

    • NSArray *array = [[NSArray alloc] initWithObjects:@0, @1, nil];

  2. 当我使用第二种模式创建时,varialbe"array"将被抛给autoreleasepool; 当我使用第三个时,var的retainCount将为1但不会被抛给autoreleasepool; 我想知道第一种模式与第二种模式或第三种模式具有相同的效果;

arrays memory-management objective-c ios

5
推荐指数
1
解决办法
146
查看次数

在Objective C中,如何通过反射找出方法的返回类型?

@interface Foo : NSObject {
}

- (Bar)bar;
Run Code Online (Sandbox Code Playgroud)

在运行时,给定[Foo类],我们如何找出Foo所有方法的返回类型?

我一直在研究Objective-C运行时API; 据我所知,没有办法获得方法或属性的返回类型(即Class).这似乎是任何反射API中的一个严重遗漏.

reflection runtime introspection objective-c

4
推荐指数
1
解决办法
3660
查看次数

Objective-C NSThread引用计数约定(保留vs自动释放)

我的主程序产生一个线程,执行以下命令:

// alloc autorelease pool somewhere before
NSArray *blah = [NSArray arrayWithObject: @"moo"];
[self performSelectorOnMainThread: @selector(boonk:) withObject: blah
      waitUntilDone: NO];
// release autorelease pool somewhere after
Run Code Online (Sandbox Code Playgroud)

现在,这似乎对我来说是错误的,因为自动释放池可以在选择器boonk:完成执行之前释放,这会导致崩溃.

所以,我接下来的自然行动将是:

// alloc autorelease pool somewhere before
NSArray *blah = [[NSArray alloc] initWithObject: @"moo"];
[self performSelectorOnMainThread: @selector(boonk:) withObject: blah
      waitUntilDone: NO];
// release autorelease pool somewhere after


- (void)boonk: (id)data
{
   // do something with data
   [data release];   // release the ref count the thread added
}
Run Code Online (Sandbox Code Playgroud)

这绝对没有错误,但......似乎不自然.是否有一个objective-c引用计数约定或协议来处理这种情况(交叉线程等待发布),或者是第二种解决方案,它的工作方式是什么?

multithreading memory-management conventions objective-c nsthread

3
推荐指数
1
解决办法
1805
查看次数

Objective-c如何在运行时处理方法解析?

我最近在这里读到,一个objective-c对象作为结构存储在堆上.该结构包含对象iVars,继承的iVars和isa指针.

我想弄清楚当我向这个对象发送消息时,运行时如何计算出要运行的代码?

我知道每个类都有一个类对象.这也存储在堆上吗?

我认为它的工作方式是运行时从结构中获取isa指针,使用它来调用类对象上的消息.它是否正确?

cocoa objective-c objective-c-runtime ios

3
推荐指数
1
解决办法
691
查看次数

块和消息

这里的问题更多的是教育问题.我在一小时前开始想到这一点,同时翻转一个乐高积木(傻,我知道).

根据我的理解,块是在堆栈上创建的对象.

让我们说A是一个对象,这意味着我们可以做到:

[A message];
Run Code Online (Sandbox Code Playgroud)

基于此,如果块是一个对象,我们也可以这样做:

[block message];
Run Code Online (Sandbox Code Playgroud)

我对么?

当运行时看到它时,它会调用:

objc_msgSend(block, @selector(message), nil);
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,我们如何发送一个消息块?

如果这是可能的,我会想象也可以发送一个块参数为块的消息?

并且,如果我们可以通过执行以下操作来调用块:

block();
Run Code Online (Sandbox Code Playgroud)

这是否意味着我们甚至可以将一个块作为message(SEL),因为块具有void (^)(void)类似于方法的签名?

因为如果有可能,那么下面的内容会让我感到惊讶:

objc_msgSend(block, @selector(block), block);
Run Code Online (Sandbox Code Playgroud)

要么:

objc_msgSend(block1, @selector(block2), block3);
Run Code Online (Sandbox Code Playgroud)

我希望我的想象力不会有点疯狂,我的理解不在这里(如果是的话,请纠正我).

macos objective-c objective-c-runtime ios objective-c-blocks

3
推荐指数
1
解决办法
471
查看次数

类类别中的Dealloc方法

我一直在寻找一些为UITableView添加类类别的第三方代码; 接口添加了三个方法,但实现还包括-dealloc方法的代码(以及其他辅助方法).

我对类类别并不是很熟悉 - 除了这看起来像是一件坏事之外,它是否会覆盖所有UITableView实例的-dealloc方法 - 即使类别不是由特定类导入(比如ViewController)实例化UITableView?

objective-c ios

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

使用NSXPCConnection时如何同步等待回复块

我正在使用NSXPCConnection,而我的接口调用之一有一个回复块,如下所示:

- (void)addItem:(NSData *) withLabel:(NSString *) reply:(void (^)(NSInteger rc))reply;
Run Code Online (Sandbox Code Playgroud)

我这样称呼:

__block NSInteger status;
[proxy addItem:data withLabel:@"label" reply:^(NSInteger rc)
         {
             status = rc;
         }
];
Run Code Online (Sandbox Code Playgroud)

我的理解是,答复块异步运行,并且有可能在方法返回后运行。

我想同步测试返回码,最好的方法是什么?


为了进一步阐明上面的代码段:proxy对象是NSXPCConnection使用该remoteObjectProxy方法从对象获得的远程对象。这是一个重要的细节,因为这会影响应答块在哪个队列上的调用。

cocoa multithreading xpc objective-c nsxpcconnection

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