小编Val*_*adu的帖子

Objective-C:如何获取`objc_property_t`属性的值?

我使用以下代码迭代对象的所有属性.我成功地检索property namechar,但我不知道如何得到property value它的id类型.有关如何实现这一目标的任何想法?

objc_property_t *allProperties = class_copyPropertyList([currentObject class], &allPropertyCount);

for (unsigned int i = 0; i < allPropertyCount; i++) {

      objc_property_t property = allProperties[i];
      const char * propertyName = property_getName(property);

}
Run Code Online (Sandbox Code Playgroud)

================================================== ======================================

编辑:谢谢大家的好评和答案.有些人问我为什么需要这个.嗯,原因如下:

我有几个同类的对象.让我们说这个类是Person,它的实例是玛丽,约翰和大卫.每个对象的属性设置如下:

mary.age = [NSNumber numberWithInt:20];
john.age = [NSNumber numberWithInt:45];
david.age = [NSNumber numberWithInt:20];

mary.gender = @"female";
john.gender = @"male";
david.gender = @"male";
Run Code Online (Sandbox Code Playgroud)

我的目的是找到一种基于给定属性名称Eg对对象进行分组的通用方法.这将创建2组[大卫和玛丽]和[约翰]:

[self groupBaseDataObjects:self.persons withPropertyName:"age"];
Run Code Online (Sandbox Code Playgroud)

还有这个:

[self groupBaseDataObjects:self.persons withPropertyName:"gender"]; 
Run Code Online (Sandbox Code Playgroud)

还将创建2组[约翰和大卫]和[玛丽]

iphone objective-c ipad

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

使用@property和@synthesize进行ivar隐式创建

好吧,所以最近我得到了这个可能的坏习惯,用@property创建getter和setter 声明我的类属性,@synthesize并且只需在我需要它的地方使用它们就像self.name没有引用内部ivar(让它@synthesize的工作)

现在,当然这不允许我访问内部的ivar(例如.name_)但是从我到目前为止编写的内容来看,我并不是真的需要它.对于只读属性,我不使用,@synthesize而是自己实现getter.

一切似乎都很好,但不知怎的,我觉得这是不对的,因为我已经查看了所有的开源库,也宣告了ivar并在整个代码中使用它.@property+ @synthesize并且没有ivar它绝对是懒惰的选择,但有什么缺点?有人可以给我一些建议吗?

另外,我已经读过,作为一般建议,self.propertyName除了deallocinit方法之外,可以在类代码中的任何地方使用它.但只要你确保对象是初始化的:

-(id) init
{
    if( (self=[super init] )) {

    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

并且在调用之前删除所有键值观察器[super dealloc]应该没问题.对?

iphone objective-c ipad

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

如何将触摸事件从UIView传递到它下面的UIView?

一个简单的问题,但我无法找到它的解决方案:

我有2个UIViews,在同一个父视图中一个在另一个之上.两者都有GestureRecognizers,但只有最顶级的是接收事件.如何让最顶层的视图通过他获取到其下面的其他UIViews的所有手势?

iphone cocoa-touch objective-c ipad ios

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

是否记录了数组`instantiateWithOwner`返回的任何地方以特定方式排序?

我最近看到一些用于instantiateWithOwnerUITableView这种方式加载单元格的代码示例:

cell = [nib instantiateWithOwner:self options:nil][0];

虽然它比将属性出口作为原型单元更清晰,更紧凑,但我想知道它是否有保证(也就是文档化)接口构建器中的第一个顶级对象将始终是返回的数组中的第一个instantiateWithOwner.此时可能就是这种情况,但如果没有记录(未定义),它可能会在将来发生变化,从而导致具有多个顶级对象的nib会出现问题并实例化此类单元格.

cocoa-touch interface-builder ios

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

memmove和malloc线程安全吗?

我有一些代码使用缓冲区移动字节memmove().缓冲区由多个线程访问.我得到一个非常奇怪的行为; 有时缓冲区不应该是它应该是什么,我在想是否memmove()和/和malloc()线程安全.我在iOS上工作(如果这是依赖于平台的).

c

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

如何使用\ t [tab]运算符格式化列中的NSString?

我想找到一种格式化NSString的方法,如下所示:

Name:               John
Location:           Unknown
Type:               Unknown
Status:             Unknown
Run Code Online (Sandbox Code Playgroud)

现在我正在使用此代码执行此操作,但结果完全不同:

代码:

serializedValue = [serializedValue stringByAppendingFormat:@"%@:\t\t%@\n",title, value];
Run Code Online (Sandbox Code Playgroud)

title左栏在哪里,value是第二栏.

结果:

Name:       John
Location:       Unknown
Type:       Unknown
Status:     Unknown
Run Code Online (Sandbox Code Playgroud)

现在,正如您所看到的,在我的情况下,总是添加常量数量的选项卡(\ t),2不会有效,因为左列中的某些单词较长而有些单词较短.我想知道是否有一种简单的方法可以做到这一点,我不知道.

iphone text text-formatting objective-c nsstring

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

Objective-C:@synchronized最佳使用

我想知道,如果我有一个需要同步的对象并且它存在于代码块中的几个(2-3)位置,那么将@synchronized添加到整个块或者在每个对象之前是否更好(更快)发生?

@synchronized (someObj) {
 [someObj removeAllObjects];        
}

..

@synchronized (someObj) {
 [someObj addObject:[NSNumber numberWithInt:203]];      
}
Run Code Online (Sandbox Code Playgroud)

VS

@synchronized (someObj) {

 [someObj removeAllObjects];

... (potential a large block of code)

[someObj addObject:[NSNumber numberWithInt:203]];

... (potential a large block of code)       
}
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

cocoa objective-c

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

任何开源快速傅立叶变换C实现?

我试图在C中使用FFT找到录制声音的基频.有人会知道C中的开源实现我可以修改和使用吗?

谢谢!

c

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

尖峰消除算法

我有一个范围从30到300的值数组。我想以某种方式得出一个加权平均值,如果我有5个值并且其中一个值比其余值大很多(峰值),则不会对平均值产生太大影响因为它会如果我只是做一个算术平均:例如:(n1+n2+n3+n4+n5)/5

有谁知道如何制作一个可以做到这一点的简单算法,或者在哪里看?

c algorithm objective-c

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

有没有办法检查文件是否使用PHP完全上传?

我在远程机器上有一个目录,我的客户端正在上传(通过不同的工具和协议,从WebDav到FTP)文件.我还有一个返回目录结构的PHP脚本.现在,问题是,如果客户端上传大文件,并且我在上传期间发出请求,PHP脚本将返回该文件,即使它没有完全上传.有没有办法检查文件是否使用PHP完全上传?

php

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