可能重复:
Objective-c中的"实例变量"和"属性"之间是否存在差异?
self.ivar和ivar之间的区别?
在@interface行之后立即在括号中声明变量和在下面定义属性之间有什么区别?
例如...
@interface GCTurnBasedMatchHelper : NSObject {
BOOL gameCenterAvailable;
BOOL userAuthenticated;
}
@property (assign, readonly) BOOL gameCenterAvailable;
Run Code Online (Sandbox Code Playgroud) 我是Objective C和iOS的新手,目前正在尝试使用iOS 6 SDK学习应用程序开发.我真的无法理解的一个概念是在.m文件中访问时"_variable"和"self.variable"之间的区别.它们是一样的吗?还是不同?
以下是一个简单的示例
MyClass.h
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
@property (strong, nonatomic) NSString *myName;
@end
Run Code Online (Sandbox Code Playgroud)
MyClass.m
#import "MyClass.h"
@interface MyClass ()
@property (nonatomic, strong) NSString *anotherName;
@end
@implementation MyClass
- (void) myFunction {
_myName = @"Ares";
self.myName = @"Ares";
_anotherName = @"Michael";
self.anotherName = @"Michael";
}
@end
Run Code Online (Sandbox Code Playgroud)
那么上面的实现设置变量有什么不同吗?变量"myName"是Public,而"anotherName"是Private.
非常感谢任何投入.谢谢!
是什么区别self.myVariable = obj;和myVariable = obj;,当我使用@propery/ @synthesize创建`MYVARIABLE?
这是一个后续问题:self.ivar和ivar之间的区别?:
self.name = @"hello";
Run Code Online (Sandbox Code Playgroud)
我想知道在神奇的 setter方法中做了什么.所以问题是:有人可以发布setter方法的源代码吗?;-) 谢谢!
可能重复:
self.ivar和ivar之间的区别?
我想知道,如果我在Obj-C中将实例变量定义为属性,例如,
@property (copy) NSString *str;
Run Code Online (Sandbox Code Playgroud)
和
@synthesize str = _str;
Run Code Online (Sandbox Code Playgroud)
我应该在实例方法中访问它吗?
_str = @"ABC";
Run Code Online (Sandbox Code Playgroud)
或者我应该使用访问者,即
[self setStr:@"ABC"];
Run Code Online (Sandbox Code Playgroud)
有关于此的一般指导原则吗?
非常感谢!
以下代码是否调用访问器"set"函数或myMember直接修改指针?
aClass.h
@interface MyClass : NSObject {
NSArray *myMember;
}
@property (nonatomic, retain) NSArray *myMember;
Run Code Online (Sandbox Code Playgroud)
aClass.c
@implementation GameplayScene
@synthesize myMember;
- (id) init {
if ( (self = [super init]) )
{
myMember = [NSArray array];
}
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我想知道是否setMyMember正在调用该方法,或者是否myMember正在直接修改指针.
同样,是否myMember = [NSArray array]相同self.myMember = [NSArray array]?
可能重复:
self.ivar和ivar之间的区别?
假设我有以下课程
@interface
@property ( nonatomic, retain ) MyObject* property;
@end
@implementation
@synthesize property = _property;
-(id) init{
if ((self = [super init])) {
_property = [MyObject new];
self.property = [MyObject new];
NSLog(@"%@", _property.description);
NSLog(@"%@", self.property.description);
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法?使用访问器(合成:self.property)或直接使用ivar?只是当我尝试在其他文件中使用它时,我有时会觉得使用访问器会导致错误.
当我在另一个晚上处理游戏时,我意识到我可以通过使用_myObject而不是减少方法调用的数量来提高我的"tick"代码的性能self.myObject.
假设这myObject是一个属性,由编译器隐式合成,并且已经有一个值,那么底层的那个与顶层的那个做同样的事情吗?
// Non-ARC
self.myObject = [self someValue];
_myObject = [self someValue];
Run Code Online (Sandbox Code Playgroud) 嗨我知道当使用箭头符号(->)访问C中的成员时,* .每次需要访问对象时都需要同时使用star和dot().
但在Objective-C中,self.myivar和之间有什么区别self->myivar?我注意到它们都适用于我的情况,我将myivar声称为属性.
objective-c ×9
ios ×3
cocoa ×2
cocoa-touch ×2
iphone ×2
accessor ×1
class ×1
ios6 ×1
macos ×1
variables ×1