XCode iPhone自动属性、合成和delloc

XCode iPhone自动属性、合成和delloc,iphone,xcode,refactoring,Iphone,Xcode,Refactoring,在过去的1-2个月里,我一直在为iPhone开发,在使用IBOutlet时,我使用以下方法声明任何属性: 在.h文件中: @interface .... { controlType varName; } @property() IBOutlet controlType varName; 在.m文件中: 在顶部-@varName 在delloc方法中-[varName release]; 虽然这个方法很好,但如果仅仅声明属性就需要几分钟的时间,那么它就不是很好了 是否有任何用于声明

在过去的1-2个月里,我一直在为iPhone开发,在使用IBOutlet时,我使用以下方法声明任何属性:

在.h文件中:

@interface ....
{
     controlType varName;
}

@property() IBOutlet controlType varName;
在.m文件中:

在顶部-
@varName

在delloc方法中-[varName release];

虽然这个方法很好,但如果仅仅声明属性就需要几分钟的时间,那么它就不是很好了

是否有任何用于声明属性、IBOutlets、IBActions或基本数据变量的自动过程

我希望对于这个场景应该有一些自动的方法,因为这是一个非常基本的过程

谢谢大家。

事实上,是的

您不再需要声明实际的iVar

简而言之,只需省略这一部分:controlType varName

现在,您仍然需要显式地“综合”

(据我所知,他们将来可能会自动完成这项工作。但现在你必须“综合”来创建setter和getter。)

你仍然需要释放内存,因为内存处理是“真正的人机编程”,所以真的没有办法实现自动化

对于任何新朋友阅读,在使用属性时不要忘记“自我”部分

另外请注意,XCode4甚至还有一个新的自动装置只需从interface builder拖动到.h文件,它就可以为您做任何事情——试试看



在回答您的补充问题时:IBOutlet不一定非得是一处房产——您可以使用普通的廉价iVar。另一方面,如果您愿意,您可以使用一个属性。此外:您甚至可以使用新的技巧(2011年),不用费心声明ivar,只需使用属性声明,并在其中插入一个IBOutlet

您可以通过更改属性声明来避免释放对象。如果您使用:

@property (assign) IBOutlet controlType varName;

retain不会在您的视图中被调用,因此您以后不必发布它。这通常是安全的,因为视图在添加到父视图时会被保留。如果出于某种原因要从其父视图中删除视图,则必须保留它们。

一个xcode脚本,用于自动完成繁琐的属性声明。

另一个不是很多人都知道的问题是,您可以从Interface Builder拖动到头文件来创建iActions或iBouts

注意:打开助理编辑器,重点关注IB中的XIB

如果以这种方式创建IBOutlets,Xcode会自动添加属性,合成属性,在viewDidUnload中将其设置为nil,并在dealloc中释放属性

您只需将IB对象拖动到头文件,方法与在视图对象及其文件所有者之间创建连接时相同(下面的屏幕截图)。

有一个很棒的工具可以加快整个过程:

您可以编写
controlType varName选择它并按下一些按钮,accessorizer将为您创建属性、init、dealloc、viewDidUnload等。您只需将代码粘贴到项目中


试试看,有一个演示

您忘记了
self.varName=nil在viewDidUnload中;-)我从来没有这样做过(我没有遇到任何问题,但是这个self.varName=nil有什么作用?我发现我很少删除在IB中创建的视图。通常我只是将视图设置为隐藏,而不是删除它们并重新添加它们。此外,如果您确实忘记了某件事,它通常会导致崩溃,而不是我发现更容易处理的泄漏。)h、 如果你正在进行协作开发,这听起来是一个坏习惯。我更喜欢XCode 4.x中的新功能,并希望苹果继续改进这些工具,与Eclipse、InteliJ等竞争。谢谢你,伙计,还有一件事几次出现在我的脑海中,那就是属性和类变量之间的区别是什么ey彼此不同?我们需要为每个IBOutlet或任何数据成员(如数组)声明属性吗?感谢您指向这个伟大的工具。在我看来,这应该是答案。
@property (assign) IBOutlet controlType varName;