Tag: objective c

在Objective-C中,实例variables是否默认设置为零?

我正在整理一些内存问题与我的iPhone应用程序,我刚刚考虑一些基本知识。 如果我设置了一个ivar,并且永远不会在我的对象的生命周期中使用它,当我调用dealloc时,会导致一个问题吗? 例如 @interface testClass { id myobject; } @property (nonatomic, retain) id myobject; @end @implementation testClass @synthesize myobject; – (id)init { … // Do I have to set myobject to nil here? // So if myobject isn't used the dealloc call to nil // will be okay? Or can you release the variable without […]

KVO – 如何检查对象是否是观察者?

当使用addObserver:forKeyPath:options:context:观察对象上的值时,最终您需要在该对象上调用removeObserver:forKeyPath:稍后进行清理。 在这之前,虽然,是否有可能检查一个对象实际上是否正在观察该属性? 我试图确保在我的代码中,一个对象只在需要的时候被删除,但是在某些情况下,观察者可能会尝试删除两次。 我正在努力防止这种情况,但为了以防万一,我一直在试图弄清楚是否有办法检查我的代码实际上是否是某个事物的观察者。

在Objective-C中定义协议的类别?

在Objective-C中,我可以将方法添加到具有类别的现有类中,例如 @interface NSString (MyCategory) – (BOOL) startsWith: (NSString*) prefix; @end 是否也可以用协议来做到这一点,即如果有一个NSString协议,如下所示: @interface <NSString> (MyCategory) – (BOOL) startsWith: (NSString*) prefix; @end 我想这样做,因为我有几个扩展到NSObject(类),只使用公共NSObject方法,我希望这些扩展也可以使用实现协议的对象。 举个更进一步的例子,如果我想编写一个方法logDescription,将对象的描述打印到日志中,该怎么办: – (void) logDescription { NSLog(@"%@", [self description]); } 我当然可以将此方法添加到NSObject,但也有其他类不从NSObjectinheritance,我也想要这种方法,例如NSProxy。 由于该方法只使用协议的公共成员,所以最好将其添加到协议中。 编辑:Java 8现在有这样的“虚拟扩展方法”的接口: http : //cr.openjdk.java.net/~briangoetz/lambda/Defender%20Methods%20v4.pdf 。 这正是我想在Objective-C中做的事情。 我没有看到这个问题引起了这么多的关注。 问候,乔臣

如何将可变parameter passing给另一个方法?

我GOOGLE了,并知道如何使用可变参数。 但我想通过我的可变参数到另一种方法。 即时通讯错误。 怎么做 ? -(void) aMethod:(NSString *) a, … { [self anotherMethod:a]; // im doing this but getting error. how to pass complete vararg to anotherMethod }

UIScrollView与居中的UIImageView,如照片应用程序

我想用图像内容视图滚动视图。 图像实际上是比屏幕大得多的地图。 地图应该最初位于滚动视图的中心,比如当您将iPhone转为横向时,照片应用中的照片。 我没有设法在正确的缩放和滚动中心的地图。 假设地图图像从屏幕的顶部开始(纵向),代码如下所示: – (void)loadView { mapView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"map.jpg"]]; CGFloat mapHeight = MAP_HEIGHT * SCREEN_WIDTH / MAP_WIDTH; mapView.frame = CGRectMake(0, 0, SCREEN_WIDTH, mapHeight); scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)]; scrollView.delegate = self; scrollView.contentSize = mapView.frame.size; scrollView.maximumZoomScale = MAP_WIDTH / SCREEN_WIDTH; scrollView.minimumZoomScale = 1; [scrollView addSubview:mapView]; self.view = scrollView; […]

我如何标记一个函数在iPhone目标C头文件中被弃用?

有谁知道如何做到这一点? 我猜这只是一些关键字,我可以坚持function的地方? 编辑 :我想要生成一个编译器警告应该任何人尝试和使用不赞成的function,类似于苹果的API中看到的行为。 干杯! 缺口。

捕获不在NSRegularExpression中工作的组

为什么这个代码只是吐出整个正则expression式匹配而不是捕获组? input @"A long string containing Name:</td><td>A name here</td> amongst other things" 预期产量 A name here 实际产出 Name:</td><td>A name here</td> 码 NSString *htmlString = @"A long string containing Name:</td><td>A name here</td> amongst other things"; NSRegularExpression *nameExpression = [NSRegularExpression regularExpressionWithPattern:@"Name:</td>.*\">(.*)</td>" options:NSRegularExpressionSearch error:nil]; NSArray *matches = [nameExpression matchesInString:htmlString options:0 range:NSMakeRange(0, [htmlString length])]; for (NSTextCheckingResult *match in matches) […]

addSubView到UIButton

我正在尝试将子视图添加到UIButton。 现在工作正常。 但是一旦添加子视图,button就不能再点击了。 我使用下面的代码: UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(column*100+24, row*80+10, 64, 64); [button addSubview:asyncImage]; [button addSubview:price]; [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 如果我切出2个addsubviews,该button再次工作。 如果有人知道如何解决这个问题,那就太棒了! 日Thnx !!!

何时会返回NO

我的iPhone应用程序正在使用MFMailComposeViewController类来发送附件中的应用程序内电子邮件。 如果MFMailComposeViewController类的“canSendMail”方法返回true(YES),应用程序将只尝试显示邮件编辑器对话框。 具体而言,如果以下方法返回YES,则显示邮件编辑器,否则向用户显示错误警报对话框,指出在设备上没有设置电子邮件帐户: – (BOOL)canDeviceSendEmail { Class mailClass = (NSClassFromString(@"MFMailComposeViewController")); return mailClass != nil && [mailClass canSendMail]; } 一组testing人员报告说,即使在设备上设置了电子邮件帐户,他们也会得到此错误警报对话框。 testing人员使用了带有OS 3.1.3的iPhone 3G。 因此,MFMailComposeViewController类必须已经存在,并且“canSendMail”方法必须返回NO。 因此,我的问题是:除了在设备上没有设置电子邮件账户的情况之外,“canSendMail”方法还能在什么情况下返回NO? 〜谢谢

在UIView中切透明的洞

想要创build一个内部具有透明框架的视图,以便通过这个透明框架可以看到视图背后的视图,但是在这之外的区域不会显示出来。 所以基本上是视图内的一个窗口。 希望能够做到这样的事情: CGRect hole = CGRectMake(100, 100, 250, 250); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor); CGContextFillRect(context, rect); CGContextAddRect(context, hole); CGContextClip(context); CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor); CGContextFillRect(context, rect); 但清除不会覆盖黑色,所以整个背景是黑色的。 任何想法沿着这些线?