Tag: 属性

IBOutlets,实例variables和属性:最佳实践

今天我已经做了各种关于宣布IBOutlet和实例variables,pipe理它们,使用正确的访问器并正确释放它们的最佳实践的研究。 我在那里,但我有一些利基问题,我希望有人能够build议最佳实践。 我会将它们格式化为代码并对问题进行评论以便于理解。 我已经排除了一些我认为不相关的明显的部分,可以安全地假设工作(像预处理器的东西,@end,所需的实现方法等)。 MyViewController.h @class OtherViewController; @interface MyViewController : UIViewController { NSString *_myString; BOOL _myBOOL; } // The first two properties aren't declared in the interface // above as per best practices when compiling with LLVM 2.0 @property (nonatomic, retain) OtherViewController *otherViewController; @property (nonatomic, retain) UIButton *myButton; @property (nonatomic, copy) NSString *myString; @property (readwrite) […]

Swift中variables值变化时执行方法

当variables值改变时,我需要执行一个函数。 我有一个singleton类包含一个名为labelChange的共享variables。 这个variables的值来自另一个叫做Model类。 我有两个VC类,其中一个有一个button和一个标签,第二个只有一个button。 当按下第一个VC类中的button时,我正在用这个func更新标签: func updateLabel(){ self.label.text = SharingManager.sharedInstance.labelChange } 但是我想在labelChange的值改变时调用相同的方法。 所以在button点击我只会更新labelChange值,当这个事情发生时,我想用labelChange的新值更新标签。 另外在第二个VC中,我能够更新labelChange值,但是当这个值被改变时,我无法更新标签。 也许属性是解决scheme,但任何人都可以告诉我如何做到这一点。 第二次编辑: 单身职业: class SharingManager { func updateLabel() { println(labelChange) ViewController().label.text = SharingManager.sharedInstance.labelChange } var labelChange: String = Model().callElements() { willSet { updateLabel() } } static let sharedInstance = SharingManager() } 首先VC: class ViewController: UIViewController { @IBOutlet weak var label: UILabel! […]

如何在目标C类中设置布尔types属性

如何在目标C类中使用布尔属性,我做到了这一点: @property (nonatomic, copy) BOOL *locationUseBool; 但它给出的错误是: 具有“复制”属性的属性必须是对象types。 什么是正确的声明方式?

Xcode 4在使用@属性时自动生成iVar,我可以在哪里find这个function的官方文档?

我读过“Xcode中有什么新东西”,但我找不到这个function的官方解释。 我在哪里可以find官方的解释? 哪些文档? 谢谢。

为什么Xcode 4自动生成一个实例variables?

我来自C#开发,并开始学习Objective-C和Xcode 4.据我所知,“@synthesize”是取代getter / setter方法的属性,如果你不需要检查/控制值正在读或写。 但为什么Xcode 4会自动为我创build一个实例variables? 这不够: @synthesize myProperty; 代替: @synthesize myProperty = _myProperty; ? 为什么我要使用/有实例variables,而不是实际属性,如果我不需要任何getter或setters? 提前致谢! MemphiZ 编辑: 我知道@synthesize正在取代getters / setters,但这是什么部分好: = _myProperty; ? 为什么我想要有一个实例variables,如果我可以直接使用“myProperty”? 我会理解使用“_myProperty”如果setter例如将检查值的条件。 如果我然后想跳过这个检查,我会使用_myProperty。 但是,当我使用@synthesize时,我没有一个setter来做一些检查。 那么,为什么我有/想要一个实例variables呢? 回答: 查看MattyG的post中的评论!

IBOutlets应该是Ivars还是属性?

虽然我确定它们存在,但是在ViewController中声明sockets的正式最佳实践中遇到困难。 目前有三个选项,我可以看到: 只有伊娃 财产只 财产支持与伊娃 当我尝试通过从IB拖动到ViewController中自动生成一个属性时,Xcode目前崩溃,但是我记得,这样做会创build一个没有ivar的属性。 也可以拖入伊娃部分,这将创build一个没有财产的伊娃。 这表明,只有财产和伊娃只有网点都可以用苹果。 所以在viewDidUnload中,我们需要将nil分配给我们的任何网点,但是dealloc呢。 如果我们使用了一个没有ivar的财产,我们怎么能释放我们的出口给我们不应该在init或dealloc中使用任何访问器? 在我看来,唯一允许我们在没有访问器的情况下释放我们的插件的模式是使用一个由ivar支持的属性,所以我们可以在不使用访问器的情况下手动释放我们的dearoc中的ivar,但是这是苹果代码生成不支持。

如果我想为自己分配一个属性呢?

如果我试图运行下面的代码: photographer = photographer 我得到的错误: 为自己分配一个属性。 我想把自己的属性分配给强制photographer didSet块来运行。 下面是一个真实的例子:在2013年冬季斯坦福大学iOS课程 “13:16”的“16. Segges and Text Fields”课程中,教授build议编写类似如下的代码: @IBOutlet weak var photographerLabel: UILabel! var photographer: Photographer? { didSet { self.title = photographer.name if isViewLoaded() { reload() } } } override func viewDidLoad() { super.viewDidLoad() reload() } func reload() { photographerLabel.text = photographer.name } 注意 :我做了如下修改:(1)代码从Objective-C切换到Swift; (2)因为它是在Swift中,我使用属性的didSet块而不是setPhotographer:方法; (3)而不是isViewLoaded我使用isViewLoaded因为前者错误地强制视图加载view属性的访问; (4) reload()方法(仅)为了简单起见而更新标签,并且因为它更类似于我的代码; […]

iOS获取属性类

我试图得到一个未知类的所有属性和每个属性的类的列表。 到目前为止,我得到一个对象的所有属性的列表(我recursion获取所有的超类)。 我在这篇文章中受到启发 + (NSArray *)classPropsFor:(Class)klass { NSLog(@"Properties for class:%@", klass); if (klass == NULL || klass == [NSObject class]) { return nil; } NSMutableArray *results = [[NSMutableArray alloc] init]; unsigned int outCount, i; objc_property_t *properties = class_copyPropertyList(klass, &outCount); for (i = 0; i < outCount; i++) { objc_property_t property = properties[i]; const char *propName […]

在iOS中需要解释@ property / @ synthesize

不是一个完整的noob我对iOS编程和Ojbective-C相当新。 我主要来自C(DSP,微控制器),Delphi XE2 / Pascal,Visual Basic和Java(桌面和Android应用程序)的背景。 我主要是从Apress那里学习Cocoa的书“Beginning iOS 5 Development”。 最近,我观看了WWDC 2012的video,并通过了他们的一些示例代码,我必须说我对编写我的应用程序的正确方式感到困惑,更具体地说,我对@ property / @综合词语感到困惑。 在本书中,绝大多数(并非全部)示例代码用来定义一个属性,例如 ViewController.h @property (strong, nonatomic) NSMutableArray *list; ViewController.m @synthesize list; 然后所有的代码访问合成列表 self.list 甚至简单地说 list 现在,在我阅读的每一个WWDC代码示例中,我都看到程序员定义了一个属性,但是在.m文件中他们会这样做 @synthesize list = _list; 和访问有时 self.list 要么 _list 我很困惑。 什么是正确的做法? 作为苹果程序员都使用下划线,我认为我应该这样做,但为什么书没有? list和_list有区别吗? 还有更多,因为我在同一个对象为什么有时使用self.list和有时列表/ _list。 有时候他们不使用@synthesize,我假定他们想要重写他们自己的访问器和增变器(这从来不是我的情况)。 我已经在网上阅读,但没有足够清楚的设置我的想法,所以我指望StackOverflow在这里带来光明。 最后但并非最不重要的,我更喜欢和回答基于当前的iOS 6最佳实践/编程技术。 无用的告诉我如何在旧的iOS中正确地做到这一点。

在Swift属性重写中解决recursion

这里是Swift中的简单扩展,对于UILabel, let dur=0.1 // (set to say 2.0 to see the effect more clearly) extension UILabel { func change(s:String)->() { print("attempting 'change' with \(s)") UIView.animateWithDuration( dur, animations: { self.alpha = 0.2 }, completion: { _ in self.text = s ///CCC UIView.animateWithDuration( dur, animations: { self.alpha = 1.0 }) }) } } 用UILabel,只要做到这一点 aLabel.change("hello there") 它会很快从旧的文本混合到新的文本。 […]