Questions tagged «objective-c»

仅在有关Objective-C功能或取决于语言代码的问题上使用此标记。标签[cocoa]和[cocoa-touch]应该用于询问Apple的框架或类。使用相关标签[ios],[macos],[apple-watch]和[tvos]来解决特定于这些平台的问题。


6
NS在iPhone中使用Objective-C记录方法名称
当前,我们正在为自己定义一个扩展的日志机制,以打印出日志的类名和源行号。 #define NCLog(s, ...) NSLog(@"<%@:%d> %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], \ __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__]) 例如,当我调用NCLog(@“ Hello world”);时,输出将是: <ApplicationDelegate:10>Hello world 现在,我还想注销方法名称,例如: <ApplicationDelegate:applicationDidFinishLaunching:10>Hello world 因此,当我们知道要调用哪个方法时,这将使调试变得更容易。我知道我们也有Xcode调试器,但是有时我也想通过注销来进行调试。

7
为什么要使用ivar?
我通常会以相反的方式问这个问题,例如,每个ivar都必须是一个属性吗?(而且我喜欢bbum对这个问题的回答)。 我几乎只在代码中使用属性。但是,我经常与一个承包商合作,该承包商已经在iOS上开发了很长时间,并且是传统的游戏程序员。他编写的代码几乎不声明任何属性,而是依靠ivars。我认为他这样做是因为1.)他习惯了,因为直到Objective C 2.0('Oct '07)和2.)才开始存在属性,以实现不通过getter / setter方法的最小性能提升。 尽管他编写的代码不会泄漏,但我仍然希望他使用属性而不是ivars。我们讨论了这个问题,由于我们没有使用KVO,他或多或少地认为没有理由使用属性,并且他在处理内存问题方面经验丰富。 我的问题是更多...为什么您要使用ivar期间-经验丰富与否。是否确实有很大的性能差异可以证明使用ivar是合理的? 同样,为了澄清起见,我根据需要覆盖了setter和getter,并使用了与getter / setter内部与该属性相关的ivar。但是,在getter / setter或init之外,我始终使用self.myProperty语法。 编辑1 我感谢所有的良好回应。我想解决的一个看起来不正确的问题是,使用ivar可以封装,而使用属性则不需要。只需在类延续中定义属性即可。这将使财产对外界隐藏。您还可以在接口中将属性声明为readonly,然后在实现中将其重新定义为readwrite,例如: // readonly for outsiders @property (nonatomic, copy, readonly) NSString * name; 并在课堂上继续学习: // readwrite within this file @property (nonatomic, copy) NSString * name; 要使其完全“私有”,只能在类继续中声明它。

6
静态库中的Objective-C类别
您能指导我如何正确地将静态库链接到iPhone项目吗?我使用添加到应用程序项目中的静态库项目作为直接依赖项(目标->常规->直接依赖项),所有工作正常,但类别有效。静态库中定义的类别在应用中不起作用。 所以我的问题是如何将带有某些类别的静态库添加到其他项目中? 通常,在其他项目的应用程序项目代码中使用最佳实践是什么?

5
如何查看NSString是否以某个其他字符串开头?
我正在尝试检查要用作URL的字符串是否以http开头。我现在尝试检查的方式似乎不起作用。这是我的代码: NSMutableString *temp = [[NSMutableString alloc] initWithString:@"http://"]; if ([businessWebsite rangeOfString:@"http"].location == NSNotFound){ NSString *temp2 = [[NSString alloc] init]; temp2 = businessWebsite; [temp appendString:temp2]; businessWebsite = temp2; NSLog(@"Updated BusinessWebsite is: %@", businessWebsite); } [web setBusinessWebsiteUrl:businessWebsite]; 有任何想法吗?

9
iPhone:检测自上次触摸屏幕以来的用户不活动/空闲时间
有没有人实施过一项功能,如果用户在一定时间内没有触摸屏幕,您会采取某种措施?我正在尝试找出最佳方法。 UIApplication中有一些与此相关的方法: [UIApplication sharedApplication].idleTimerDisabled; 如果您拥有这样的东西,那就太好了: NSTimeInterval timeElapsed = [UIApplication sharedApplication].idleTimeElapsed; 然后,我可以设置一个计时器并定期检查该值,并在超过阈值时采取一些措施。 希望这可以解释我在寻找什么。有没有人已经解决了这个问题,或者对您将如何处理有任何想法?谢谢。


16
如何在UILabel中嵌入小图标
我需要UILabel在iOS7中嵌入一​​些小图标(某种自定义项目符号)。如何在界面设计器中执行此操作?或至少在代码中? 在Android中有leftDrawable和rightDrawable用于标签,但是在iOS中如何实现?android中的示例:


20
NSAttributedString的bo​​undingRectWithSize返回错误的大小
我正在尝试获取属性字符串的rect,但是boundingRectWithSize调用不尊重我传入的大小,而是返回具有单行高度而不是大高度的rect(这是一个长字符串)。我通过传递一个很大的高度值和0来进行实验,如下面的代码所示,但是返回的rect始终相同。 CGRect paragraphRect = [attributedText boundingRectWithSize:CGSizeMake(300,0.0) options:NSStringDrawingUsesDeviceMetrics context:nil]; 这是坏了吗,还是我需要做其他事情才能让它返回一个用于包装文本的矩形?

10
我如何在没有自定义单元格的UITableViewCell中包装文本
这是在iPhone 0S 2.0上。2.1的答案也很好,尽管我不知道有关表的任何差异。 感觉应该可以在不创建自定义单元格的情况下自动换行,因为默认情况下a UITableViewCell包含一个UILabel。我知道如果创建自定义单元,我就可以使其正常工作,但这不是我要实现的目标-我想了解为什么我当前的方法不起作用。 我发现标签是按需创建的(由于单元格支持文本和图像访问,因此它直到需要时才创建数据视图),因此,如果执行以下操作: cell.text = @""; // create the label UILabel* label = (UILabel*)[[cell.contentView subviews] objectAtIndex:0]; 然后我得到一个有效的标签,但是numberOfLines在该标签(和lineBreakMode)上的设置不起作用-我仍然得到单行文本。UILabel要显示的文本中有很多高度-我只是返回的高度值heightForRowAtIndexPath。


15
在iOS中将HTML转换为NSAttributedString
我正在使用的实例UIWebView来处理一些文本并正确为其着色,它以HTML形式提供结果,而不是将其显示在UIWebView我想使用来显示Core Text的结果中NSAttributedString。 我可以创建和绘制,NSAttributedString但不确定如何将HTML转换并映射到属性字符串中。 我了解在Mac OS X下NSAttributedString有一种initWithHTML:方法,但这只是Mac的一种补充,不适用于iOS。 我也知道有一个与此类似的问题,但没有答案,尽管我会再试一次,看看是否有人创建了一种方法来进行此操作,如果可以,则是否可以共享。

6
何时使用enumerateObjectsUsingBlock与
除了明显的区别: 使用enumerateObjectsUsingBlock时,你既需要索引和对象 enumerateObjectsUsingBlock当您需要修改局部变量时不要使用(我错了,请参见bbum的答案) 被enumerateObjectsUsingBlock普遍认为是好还是坏的时候for (id obj in myArray)也会工作?优点/缺点是什么(例如,或多或少的性能)?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.