我正在尝试使用UIImageView
并在//for this line
CAShapeLayer* shapeLayer = [CAShapeLayer layer];
上绘制一些贝塞尔曲线或圆圈
我读了一些关于Apple示例代码的示例,发现了一些我不理解的内容。
CAShapeLayer* shapeLayer = [CAShapeLayer alloc];
与以下内容有什么不同:
[shapeLayer release]
显然,如果我使用后者,那么我需要做android.view.InflateException: Binary XML file line #24: Error inflating class fragment
(假设自动参考会计被关闭)
任何建议都将不胜感激
答案 0 :(得分:2)
仅供参考,[CAShapeLayer layer]
更类似于[[CAShapeLayer alloc] init]
,而不仅仅是[CAShapeLayer alloc]
。或者,在非ARC世界中,它实际上等同于[[[CAShapeLayer alloc] init] autorelease]
。
这种模式是一种简单的类方便方法,它有效地执行alloc
/ init
非常常见。请考虑[NSMutableArray array]
而不是[[NSMutableArray alloc] init]
或[NSMutableDictionary dictionary]
而不是[[NSMutableDictionary alloc] init]
。您还经常会看到此便捷方法的变体采用参数。例如,考虑NSString
,stringWithFormat
等stringWithContentsOfURL
方法。
就您不必显式释放使用这些便捷方法创建的对象的原因而言,请注意内存管理由方法名称指示。以alloc
,copy
,new
或mutableCopy
开头的方法会创建您负责在非ARC环境中发布的+1对象。所有其他方法都会生成autorelease
个对象,这些对象将在池耗尽时为您释放(当然,除非您执行保留它的其他操作)。底线,[CALayer layer]
生成自动释放对象,而[[CALayer alloc] init]
则不生成。
答案 1 :(得分:0)
我认为[CAShapeLayer图层]实际上使用工厂设计模式,它会为您创建一个图层。通过使用[CAShapeLayer alloc],您将自己创建一个图层
答案 2 :(得分:0)
不要读这个:它是过时的技术! 您在浪费时间编写非ARC 代码。
[[[CALayer alloc] init] autorelease];
相当于:
bool CheckLoginDetails(string username, string password){
DataTable dt = new DataTable ();
MySqlCommand command = new MySqlCommand ("select * from `accounts` where `username` = '@username';", SL.Database.connection);
command.Parameters.AddWithValue ("@username", username);
dt.Load (command.ExecuteReader());
}