最近因为工作上的需要,在学习flex.看了creating and extending flex2 components文档,网页链接如下:http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&file=metadata_141_01.html#161936
有兴趣的可以一起研究下哈。
在学习到MetaData的时候,对其中的[InstanceType]这个不是很理解。按照文档中的解释,它是用来限定组建类型的。应用于创建模板的场景。请看如下代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" initialize="init();">
<mx:Script>
<![CDATA[
import mx.validators.ValidationResult;
import mx.core.UIComponent;
import mx.containers.HBox;
import mx.controls.CheckBox;
[InstanceType("mx.controls.Button")]
public var topRow:IDeferredInstance;
[InstanceType("mx.controls.Button")]
[ArrayElementType("mx.core.IDeferredInstance")]
public var bottomRow:Array;
private function init():void{
addChild(UIComponent(topRow.getInstance()));
var controlbox:HBox = new HBox();
for(var i:int = 0;i<bottomRow.length;i++){
controlbox.addChild(UIComponent(bottomRow[i].getInstance()));
}
addChild(controlbox);
}
]]>
</mx:Script>
</mx:VBox>
在上面的代码中,使用了:(1)[InstanceType("mx.controls.Button")]
public var topRow:IDeferredInstance;
我们写了一个TemplateTest.mxml
对这个MyTemplateComponentDeferredSpecific.mxml进行使用的时候:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:MM = "components.*">
<mx:Panel paddingTop="10" paddingBottom="10"
paddingRight="10" paddingLeft="10">
<MM:MyTemplateComponentDeferred >
<MM:topRow>
<mx:Label text="button" />
</MM:topRow>
<MM:bottomRow>
<mx:Button id="save" label="save1"/>
<mx:Button id="btn2" label="cancel"/>
<mx:Button id="btn3" label="back"/>
</MM:bottomRow>
</MM:MyTemplateComponentDeferred>
</mx:Panel>
</mx:Application>
与以上(1)处代码对应的是<MM:topRow>
<mx:Label text="button" />
</MM:topRow>
MetaData的作用就是告诉编译器如何去解析识别代码,所以在编译的时候,就对topRow里面的组建类型进行检验,由于这里是Label类型,而如(1)处代码所示,模板中限定了只能为Button类型,不匹配,便出现了error提示:In initializer for 'topRow': type mx.controls.Label is not assignable to target type mx.controls.Button
然后将它改称<mx:Button label="button">编译通用,没问题了。
但是,怀着好奇心,又试了一下,将它改成了<mx:CheckBox label="box">,问题出现了,居然没有报错。
遂又试了几个,将[InstanceType("mx.controls.Button")]改称[InstanceType("mx.controls.CheckBox")],也没问题。然后将<MM:topRow>
<mx:Label text="button" /> </MM:topRow>
改成<MM:topRow>
<mx:Button label="button" />
</MM:topRow>
出现warning:[InstanceType](mx.controls:CheckBox): type mx.controls:CheckBox is unavailable.
但是运行还是可以的,生成Button组建。
难道是组建之间存在什么兼容性?望高人指点。
分享到:
相关推荐
本文将深入探讨如何在C# DropDownCombo控件中利用AWS SDK来展示和使用`InstanceType`属性,以便用户可以方便地选择不同类型的AWS EC2实例。 首先,AWS SDK为.NET开发者提供了丰富的类库,使得与AWS服务的交互变得...
1. 封锁初始化:使类的实例化过程只能在特定的代码块中进行,通常是`+ (instancetype)sharedInstance`方法。 2. 添加静态实例变量:用来保存类的唯一实例。 3. 添加私有初始化方法:防止外部直接通过`init`方法创建...
这涉及到对Assembly和Module类的使用,因为类型存在于特定的程序集和模块中。 ```csharp public Type GetTypeFromName(string typeName) { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); ...
在iOS开发中,单例(Singleton)是一种设计模式,它保证了类只有一个实例,并提供一个全局访问点。这种模式在需要频繁创建和销毁对象,或者需要共享数据的情况下非常有用。在iOS应用中,特别是当你想要在多个视图...
Objective-C中的单例模式是一种设计模式,用于在整个应用程序中确保只有一个特定类的实例存在,并提供一...在实际开发中,可以根据需求对单例进行扩展,添加额外的功能或属性,但始终要保持单例的唯一性和全局访问性。
1. 违反开闭原则:对扩展开放,对修改关闭。单例模式限制了类的实例化,增加了代码的耦合度。 2. 测试困难:由于全局只有一个实例,单元测试时难以模拟不同的环境。 3. 可能导致滥用:如果过度使用,可能会造成系统...
在 `TCUtil.m` 文件中,添加 `- (instancetype)init NS_UNAVAILABLE;` 来禁止直接使用 `init` 方法。 3. **单例实现**: 实现 `+ (instancetype)sharedInstance;` 方法。这里通常使用 GCD(Grand Central Dispatch...
在iOS开发中,Objective-C是苹果官方推荐的编程语言,对于初学者来说,掌握其基本语法至关重要。NSSet作为Objective-C中的一个核心数据结构,尤其在处理无序且不重复元素的集合时,扮演着重要角色。本文将深入探讨...
(instancetype)provincePickerViewWithProvinceBlock:(void(^)(NSString *province))provinceBlock; /** * 显示省份和市级 * cityBlock : 回调省份和城市 */ (instancetype)cityPickerViewWithCityBlock:(void...
苹果公司在OS X 10.5及后续版本中,对多线程的支持进行了显著增强,引入了`NSThread`、`NSOperation`以及`NSOperationQueue`等类,使得开发者能够更加轻松地管理和控制多线程任务。 #### NSThread简介 `NSThread`...
2. **资源控制**:可以有效地控制共享资源,避免多个对象对同一资源的并发访问问题。 3. **节省内存**:如果一个对象会频繁使用,但只需要一个实例,单例可以避免频繁的内存分配。 注意事项: 1. **内存泄漏**:...
可以通过初始化方法创建`NSOrderedDictionary`,如`+ (instancetype)dictionaryWithCapacity:(NSUInteger)capacity`,或者从键值对数组创建,如`+ (instancetype)dictionaryWithObjects:(NSArray *)objects forKeys...
在Objective-C中,单例的实现通常使用`+ (instancetype)sharedInstance`方法。首先,我们需要声明一个静态变量来保存单例实例,然后在`+initialize`方法中初始化这个实例。`+initialize`是类加载时自动调用的方法,...
为了解决这个问题,可以在Swift中对单例进行封装: ```swift class SwiftSingleton { static let sharedInstance = SingletonClass.sharedInstance } ``` 总结起来,OC中的单例模式涉及了内存管理、线程安全和...
字典是一种常见的数据结构,可以方便地存储键值对,而模型对象则是面向对象编程中的实体类,用于封装业务数据。将字典转化为模型对象可以提高代码的可读性和可维护性。本文将深入探讨iOS中进行字典到模型转化的几种...
在`UdpSocketController.h`中,我们可以预见到会声明一些关键的方法,例如初始化方法`- (instancetype)init`; 开始监听的方法`- (void)startListeningOnPort:(UInt16)port`; 发送数据的方法`- (void)sendData:...
总的来说,这个示例提供了一种在iOS应用中方便地跨界面传递和执行Block的方法,减少了对代理模式的依赖,提高了代码的灵活性。然而,使用这种方式时也需要注意内存管理问题,避免不必要的内存泄漏。
单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在iOS应用开发中,单例模式被广泛用于管理共享资源、配置信息或者提供全局服务。这个“单例模式.zip”文件包含的是一个适用于iOS...
- 使用`+ (instancetype)alloc]`和`- (id)init]`,可以将类方法转换为实例方法,因为`alloc`实际上是一个类方法,它返回一个新分配的未初始化的实例。 - 但是,注意不要在类方法中误用`self.init`,因为这会引发...