我一直想知道属性的东西.使用属性时,是否需要覆盖发布消息以确保属性是已发布的属性?
即以下(虚构)示例是否足够?
@interface MyList : NSObject {
NSString* operation;
NSString* link;
}
@property (retain) NSString* operation;
@property (retain) NSString* link;
@end
@implementation MyList
@synthesize operation,link;
@end
Run Code Online (Sandbox Code Playgroud) 您可以在objective-c中声明一个方法,并基本上将每个参数命名为两次.
我觉得这很强大,但我还不确定如何使用它......
当John Greets Kelly:
[ p Greet:"John" toPerson:"Kelly" greetWith:"hey babe" ] ;
关于它的一些东西不能自然地阅读.我不确定这是一个经验丰富的Objective-c程序员是如何写出"消息"的.
有人可以解释每个参数的两个名称的原因,并可能是一个更有用的例子,说明如何有效地使用它来在程序中加入意义?
还有什么困扰我,这是第一个参数的名称基本上与' 消息 ' 的名称相同.你如何通过编写有意义且易于理解的方法/'消息名称'来解决这个问题?
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
}
-(void)Greet:(char*)from toPerson:(char*)to greetWith:(char*)greeting ;
@end
@implementation Person
-(void)Greet:(char*)from toPerson:(char*)to greetWith:(char*)greeting ;
{
printf( "%s says %s to %s\n", from, greeting, to ) ;
}
@end
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Person * p = [ Person … 在浏览了初学者的iPhone开发人员书并在线阅读示例代码后,我注意到大多数Objective C程序员几乎合成了每个实例变量.有些变量很方便snythesize,但大多数变量不应该遵循面向对象的封装原则.最糟糕的是标记为私有的合成属性.试图使用其他人的代码的C++程序员将读取头文件中的公共字段和方法.他们将跳过私有变量.这个C++程序员不会知道你打算以某种有意义的方式使用私有属性.
在Apple提供的延迟表图像加载上查看此示例模板:
头
@interface ParseOperation : NSOperation <NSXMLParserDelegate>
{
@private
id <ParseOperationDelegate> delegate;
NSData *dataToParse;
NSMutableArray *workingArray;
AppRecord *workingEntry;
NSMutableString *workingPropertyString;
NSArray *elementsToParse;
BOOL storingCharacterData;
}
Run Code Online (Sandbox Code Playgroud)
资源
@interface ParseOperation ()
@property (nonatomic, assign) id <ParseOperationDelegate> delegate;
@property (nonatomic, retain) NSData *dataToParse;
@property (nonatomic, retain) NSMutableArray *workingArray;
@property (nonatomic, retain) AppRecord *workingEntry;
@property (nonatomic, retain) NSMutableString *workingPropertyString;
@property (nonatomic, retain) NSArray *elementsToParse;
@property (nonatomic, assign) BOOL storingCharacterData;
@end
@implementation ParseOperation
@synthesize delegate, dataToParse, workingArray, workingEntry, workingPropertyString, elementsToParse, storingCharacterData; …Run Code Online (Sandbox Code Playgroud) 对不起,我不太了解Objective-C.
这是SomeClass.h:
@interface SomeClass : NSObject
@property NSString *property;
@end
Run Code Online (Sandbox Code Playgroud)
我们可以property在SomeClass.m中使用它们
self.property
和
_property.
我应该使用哪个?
是否有某种情况决定使用哪种方式?
谢谢您的帮助.
我定义了以下属性:
@property (nonatomic, retain) NSString *name_;
@property (nonatomic, retain) NSString *profilePicture_;
@property (nonatomic, retain) NSString *username_;
@property (nonatomic, retain) NSString *id_;
Run Code Online (Sandbox Code Playgroud)
我把它们设置在我init...这样的:
-(id)initWithData:(NSDictionary *)data
{
self = [super init];
if (!self) {
return nil;
}
name_ = [data valueForKey:@"full_name"];
profilePicture_ = [data valueForKey:@"profile_picture"];
username_ = [data valueForKey:@"username"];
id_ = [data valueForKey:@"id"];
return self;
}
Run Code Online (Sandbox Code Playgroud)
以下内容dealloc:
-(void)dealloc
{
[name_ release];
[username_ release];
[profilePicture_ release];
[id_ release];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
但是dealloc给了我一个错误:
正在释放的指针未分配
为什么是这样?我必须做的[[NSString alloc] init...] …