相关疑难解决方法(0)

为什么我不应该在init/dealloc中使用Objective C 2.0访问器?

@ mmalc的 响应这个问题,他指出:"一般来说,你应该使用访问中的dealloc方法(或init)." 为什么mmalc这样说?

我能想到的唯一真正原因是性能和避免@dynamic制定者的未知副作用.

讨论?

cocoa objective-c

41
推荐指数
3
解决办法
1万
查看次数

是否需要释放Objective-c 2.0属性的内存?

我一直想知道属性的东西.使用属性时,是否需要覆盖发布消息以确保属性是已发布的属性?

以下(虚构)示例是否足够?

@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)

cocoa objective-c

8
推荐指数
1
解决办法
3335
查看次数

Objective-C"消息" - 阅读它的正确方法是什么?

您可以在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 …

object objective-c message-passing

8
推荐指数
1
解决办法
626
查看次数

私人合成财产是矛盾吗?

在浏览了初学者的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)

oop iphone encapsulation objective-c

8
推荐指数
1
解决办法
1440
查看次数

我应该使用哪个:self.property或_property

对不起,我不太了解Objective-C.

这是SomeClass.h:

@interface SomeClass : NSObject

@property NSString *property;

@end
Run Code Online (Sandbox Code Playgroud)

我们可以propertySomeClass.m中使用它们

self.property

_property.

我应该使用哪个?

是否有某种情况决定使用哪种方式?

谢谢您的帮助.

objective-c

2
推荐指数
1
解决办法
1890
查看次数

在dealloc中释放ivars会导致"指针被释放未分配"错误

我定义了以下属性:

@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...] …

cocoa-touch memory-management properties objective-c

0
推荐指数
1
解决办法
345
查看次数