Objective-C:关于头文件声明的简单问题

ach*_*ral 3 iphone header objective-c

这是一个初学者,为iPhone开发,有一个非常简单的问题:在头文件中声明一个方法,然后在实现文件中填写它的原因是什么?这总是必须要做吗?

另外,我知道在头文件的@interface中声明变量,但为什么它们有时只用@property标签重复?这是否适用于其他类可能希望读取或写入的变量(因此它们会自动创建getter和setter方法)?

亲切的问候.

rus*_*afi 10

在.h文件中声明方法称为前向声明.如果在.h文件中声明方法头,则编译器将在实际链接之前知道方法名称,参数和返回类型.您只能在.m文件中编写方法体.但该方法只能由该文件中声明的方法使用.但是如果你在标题中声明一个方法那么它就不是问题了.因为在编译器的第一次传递期间方法签名将被所有人知道,并且将在第二次传递中链接.

@property@synthesize标记用于创建自动getter和setter(或AccessorsMutators,在Objective-C术语),但还有更多.在iOS你必须手动进行内存管理(应该iOS5像苹果承诺的那样进行更改).在@property标签中,您可以了解内存在分配期间的行为方式.

iOS通过保持保留计数来跟踪对象的内存管理.当您分配一个对象时,它的保留计数变为1.然后您可以通过retain方法手动增加保留计数(例如[myObj retain])或通过释放方法减少保留计数(例如[myObj release]).当保留计数降至0时iOS,从内存中删除该对象.使用@property标记,您可以定义在分配期间如何管理保留计数.例如,@property标签中两个最常用的参数是:

@property (nonatomic, retain)
@property (nonatomic, assign)
Run Code Online (Sandbox Code Playgroud)

在分配期间的第一种情况下,对象的保留计数将自动增加1(例如self.myObj = anotherClass.anotherObjOfSameClass;),而在后一种情况下,保留计数不会增加.

  • 使用Objective-C 3.0,根本不需要声明"私有"方法.订单也不再相关. (2认同)