草庐IT

OBJC_IVAR

全部标签

iphone - self.ivar 和 ivar 的区别?

aclass.h@interfaceaClass:NSObject{NSString*name;}@property(nonatomic,retain)IBOutletNSString*name;@endaclass.m@implementationaClass@synthesizename;-(void)dealloc{[namerelease];[superdealloc];}-(void)test1{name=@"hello";}-(void)test2{self.name=@"hello";}以上面为例。有人可以解释一下name=@"hello"之间的区别吗?和self.nam

objective-c - 在 ObjC 实现文件中声明的实例变量

我在观看WWDCARC介绍视频时,当一些Apple工程师谈到Stack示例时,我看到了以前在ObjC中从未见过的东西。以下代码用于ARC的堆栈示例:@implementationStack{//instancevariabledeclaredinimplementationcontextNSMutableArray*_array;}-(id)init{if(self=[superinit])_array=[NSMutableArrayarray];returnself;}-(void)push:(id)x{[_arrayaddObject:x];}-(id)pop{idx=[_arra

objective-c - 通过 ObjC 类别覆盖方法并调用默认实现?

使用类别时,您可以使用自己的方法覆盖实现方法,如下所示://BaseClass@interfaceClassA:NSObject-(NSString*)myMethod;@end@implementationClassA-(NSString*)myMethod{return@"A";}@end//Category@interfaceClassA(CategoryB)-(NSString*)myMethod;@end@implementationClassA(CategoryB)-(NSString*)myMethod{return@"B";}@end在包含类别后调用方法“myMetho

objective-c - iOS 8 Mapkit Objc 无法获取用户位置

我正在使用Obj-CNOTSWIFT在iOS8中使用MapKit。我无法获取设置为0.00、0.00的设备位置,并且出现错误:TryingtostartMapKitlocationupdateswithoutpromptingforlocationauthorization.Mustcall-[CLLocationManagerrequestWhenInUseAuthorization]or-[CLLocationManagerrequestAlwaysAuthorization]first.我已经实现了:(我一次只尝试了一个,没有运气)if(IS_OS_8_OR_LATER){[se

objective-c - ARC时代的属性(property)与ivar

据我了解,现在设置ivar会保留分配给它的对象,因为设置变量默认为strong限定符。因为ivars在声明它们的对象的范围内,而strong将对象保留在变量的范围内,这意味着当包含ivar的对象仍然存在时,永远不会释放ivars值。这对吗?如果是这样,我是否认为在内存管理方面,保留(强)属性和简单ivar之间不再有区别? 最佳答案 如果是变量:在使用ARC的类中声明.仅用于类实现(不作为类接口(interface)的一部分公开)。不需要任何KVO.不需要任何自定义getter/setter。然后将其声明为没有相应@property/

objective-c - 如何在对象内使用 objc_setAssociatedObject/objc_getAssociatedObject?

如果我在类别实现中使用objc_setAssociatedObject/objc_getAssociatedObject将模拟实例变量存储在setter方法中,我将如何访问getter方法中的键,因为在setter方法中声明的任何变量都将超出getter的范围方法?编辑:澄清一下,如果我要使用以下模式,我应该在哪里声明STRING_KEY以便我可以在setter和getter方法中使用它。@interfaceNSView(simulateVar)-(void)setSimualtedString:(NSString*)myString;-(NSString*)simulatedStri

iphone - 什么是 objc_setAssociatedObject() 以及在什么情况下应该使用它?

在我接手的一个项目中,原作者选择使用objc_setAssociatedObject(),我不是100%清楚它的作用或他们决定使用它的原因。我决定查一下,不幸的是,文档并没有很好地描述它的用途。objc_setAssociatedObject使用给定键和关联策略为给定对象设置关联值。voidobjc_setAssociatedObject(idobject,void*key,idvalue,objc_AssociationPolicy策略)参数对象关联的源对象。键关联的key。值与对象的键键关联的值。传递nil以清除现有关联。政策协会的政策。有关可能的值,请参阅“关联对象行为”。那么这

objective-c - 构建失败,出现 : ld: duplicate symbol _OBJC_CLASS_$_Algebra5FirstViewController

我通过iPhone模拟器运行我的应用程序时突然收到此错误:clang:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation):ld:duplicatesymbol_OBJC_CLASS_$_Algebra5FirstViewControllerin.../Algebra5-anwcuftojtxtgkfootneeeqhwztj/Build/Intermediates/Algebra5.build/Debug-iphonesimulator/Algebra5.build/Objects-normal/i386/Exerc

objective-c - 如何向 objc_exception_throw 添加断点?

这是布拉德·拉森对此的回答SO问题如果你添加两个断点,你应该能够调试这些异常。为此,请转到运行|显示|断点并创建两个全局断点(我在全局范围内执行它们,因为它们在我的所有应用程序中都非常有用)。第一个应命名为“objc_exception_throw”,其位置应为“libobjc.A.dylib”。第二个应该是“-[NSExceptionraise]”,它的位置应该是“CoreFoundation”。现在,如果您在启用断点的情况下开始调试应用程序,它应该会在抛出这些异常时中断。然后,您应该能够在调试器中看到导致异常的事件链。现在在这个答案中我想问我如何添加提到的位置???

objective-c - 为什么要使用 ivar?

我通常看到这个问题是用另一种方式问的,比如Musteveryivarbeaproperty?(我喜欢bbum对这个问题的回答)。我几乎只在我的代码中使用属性。然而,每隔一段时间,我就会与一个长期在iOS上进行开发并且是传统游戏程序员的承包商一起工作。他编写的代码几乎不声明任何属性,并且依赖于ivars。我认为他这样做是因为1.)他已经习惯了,因为在ObjectiveC2.0(07年10月)和2.)之前并不总是存在属性,因为不通过getter/setter的性能增益最小。虽然他编写的代码不会泄漏,但我仍然希望他使用属性而不是ivars。我们讨论过它,他或多或少认为没有理由使用属性,因为我