关于CAShapeLayer的ObjectiveC

时间:2015-08-23 01:47:11

标签: objective-c cashapelayer

我正在尝试使用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(假设自动参考会计被关闭)

任何建议都将不胜感激

3 个答案:

答案 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]。您还经常会看到此便捷方法的变体采用参数。例如,考虑NSStringstringWithFormatstringWithContentsOfURL方法。

就您不必显式释放使用这些便捷方法创建的对象的原因而言,请注意内存管理由方法名称指示。以alloccopynewmutableCopy开头的方法会创建您负责在非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());
}