blog

シンセサイズ

Xcode 5 以降、@property は、メンバ変数とゲッター、セッターメソッドの宣言と実装を自動的に生成することができます。デフォルトでは、ゲッター、セッターメソッドは変数に作用します。 しかし...

Jul 19, 2020 · 2 min. read
シェア

Xcode 4では、@propertyはゲッターメソッドとセッターメソッドの宣言しか生成できません;

Xcode 5 から、 自動的に _propertyName メンバ変数とゲッター、セッターメソッドの宣言と実装を生成することができます。デフォルトでは、ゲッター、セッターメソッドは _propertyName 変数に作用します。

しかし、getterメソッドとsetterメソッドの両方がオーバーライドされると、デフォルト変数_propertyNameに対応できない完全なカスタム実装が実現され、_propertyNameは無効になり、手動で変数を定義するか、プロパティにバインドするために@synthesizeを使用して変数を指定する必要があります。

I. 変数の手動定義

Girl.h

#import <Foundation/Foundation.h>
@interface Girl : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *boyFriend;
@end

ガールエム

#import "Girl.h"
@implementation Girl
/* *************** MARK: 方法1*************** */
{
 NSString* _name; //変数を手動で登録する
}
- (NSString *)name{
 if (!_name) {
 _name = @"tanakali";
 }
 return _name;
}
- (void)setName:(NSString *)name{
 _name = name;
}
@end

変数を手動で定義しに行かなければ、ゲッターやセッターだけを書くのは問題ありませんが、同時に書き直すとエラーになります。

/* *************** MARK: 方法2*************** */
@synthesize boyFriend = man; // @synthesize,属性を変数
- (NSString *)boyFriend {
 if (!man) {
 man = @"Jerod";
 }
 return man;
}
- (void)setBoyFriend:(NSString *)boyFriend{
 man = boyFriend;
}

boyFriend 属性はもともと _boyFriend 変数に対応しており、ここでは属性、ゲッター、セッターに対応する変数が @synthesize によって変更されています。

Read next

CKEditor

// エディターの

Jul 19, 2020 · 1 min read