
// .h file@interface MyLogger : NSObject { ... }- (MyLogger*) indent:(BOol)indent;- (MyLogger*) deBUG:(Nsstring*)message,...;- (ID) warning:(Nsstring*)message,...;....@end// .m file@implement MyLogger {- (MyLogger*) indent:(BOol)indent { // some codes to set indent or unindent return self; // I think it should return [self autorelease];}- (MyLogger*) deBUG:(Nsstring*)message,... { // build message and log the message return [self autorelease];}- (ID) warning:(Nsstring*)message,... { // similar as above,but log a warning message return self;}//. usage in another .m -(ID) initAnotherClass { if (self = [supper init]) { // ... // instance was defined as MyLogger in .h as class var instance = [[[MyLogger alloc] initWithContext:@"AnotherClassname"] retain]; //... } return self; } -(voID)method1 { [[instance deBUG:@"method1"] indent:YES]; ... [instance warning:@"some deBUG message with obj: %@",var]; ... [[instance indent:NO] deBUG:@"method1 DONE"]; } // in my Xcode output I'll see deBUG output like [date time] [app ID] [DEBUG] AnotherClassname - method1 [date time] [app ID] [WARNING] AnotherClassname - some deBUG message with obj: ... [date time] [app ID] [DEBUG] AnotherClassname - method1 DONE 在缩进中,我返回自己,而在调试中:我返回[self autorelease].它工作正常,如果我只返回自己喜欢在调试.但是,我认为我应该总是以与调试中相同的方式返回:在OC内存管理方面.有什么建议么?
更新:我添加了另一种方法警告与返回类型的ID.我应该将自己作为ID类型还是我的类在OC中返回?它似乎都工作正常,没有编译错误或警告.我似乎Cocoa框架类返回ID.例如,Nsstring.h中有一些方法
+ (ID)string;+ (ID)stringWithString:(Nsstring *)string;
似乎可可有一些FI模式像方法. ID类型应该比类本身好吗?
更新:作为Pat Wallace的建议,我实际上在iPhone项目中使用这种模式.
解决方法 这里有几个注释:>当您从方法返回现有对象时,如果仍然“关心”该对象,则不会自动释放它,您只需返回它.在这种情况下,由于即使在调用者获得引用之后,您仍然“保持”自己的对象,所以不要发送自动释放消息.不要将模式视为“返回自动释放的对象”;只有当您在方法中创建对象时,才能执行此 *** 作,并希望在不保留引用的情况下返回它.如果调用者想要保留引用,它可以自由保留.> self是一种特殊的引用,很少发送自己的任何内存管理消息,可能在init方法之外.>尽管你可以创建一个流畅的消息链接模式,就像你想要做的那样,只是一个注释,这不是常见的/惯用的Objective-C,你的代码可能与其他代码混合不好,可能会混淆其他人阅读.只是FYI.
总结以上是内存溢出为你收集整理的iphone – Objective-C中流畅的界面模式全部内容,希望文章能够帮你解决iphone – Objective-C中流畅的界面模式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)