1

我目前正在尝试使用 ARC 将 Paypal 的 MECL 集成到现有的 IOS 项目中。

我相信通过手动删除代码中的所有发布/保留应该使其与 ARC 兼容。

只有一个语句我不知道如何转换:“InitAndDealloc”可以在几个类中找到,例如这里:

static NSString *SolutionTypeStrings[] = {@"Sole", @"Mark"};
static NSString *LandingPageTypeStrings[] = {@"LandingPage", @"Billing", @"Login"};
static NSString *ChannelTypeStrings[] = {@"Merchant", @"eBayItem"};

#define LOCALE_CODE @"LocaleCode"

@implementation SetExpressCheckoutRequestDetails

InitAndDealloc

StringAccessor(ReturnURL)
StringAccessor(CancelURL)
StringAccessor1(cppHeaderImage, @"cpp-header-image")
StringAccessor1(cppHeaderBorderColor, @"cpp-header-border-color")
StringAccessor1(cppHeaderBackColor, @"cpp-header-back-color")
StringAccessor1(cppPayflowColor, @"cpp-payflow-color")
IntAccessor(AllowNote)
IntAccessor(ReqConfirmShipping)
TypedefAccessor(NoShipping, NoShippingType)
StringAccessor(Token)
AmountAccessor(MaxAmount)
StringAccessor(CallbackURL)
IntAccessor(CallbackTimeout)
GenericAccessor1(FlatRateShippingOptions, ShippingOptions)
IntAccessor(AddressOverride)
StringAccessor(PageStyle)
StringAccessor(BuyerEmail)
StringAccessor(giropaySuccessURL)
StringAccessor(giropayCancelURL)
StringAccessor(BanktxnPendingURL)
GenericAccessor(EnhancedCheckoutData)
GenericAccessor(BuyerDetails)
StringAccessor(BrandName)
GenericAccessor(FundingSourceDetails)
StringAccessor(CustomerServiceNumber)
IntAccessor(GiftMessageEnable)
IntAccessor(GiftReceiptEnable)
IntAccessor(GiftWrapEnable)
StringAccessor(GiftWrapName)
AmountAccessor(GiftWrapAmount)
IntAccessor(BuyerEmailOptinEnable)
StringAccessor(SurveyQuestion)
StringAccessor(CallbackVersion)
IntAccessor(SurveyEnable)
MutableArrayAccessor(PaymentDetails)
MutableArrayAccessor(BillingAgreementDetails)
MutableArrayAccessor1(OtherPaymentMethods, OtherPaymentMethodDetails)
MutableArrayAccessor1(SurveyChoice, NSString)
EnumAccessor(SolutionType, SolutionType)
EnumAccessor(LandingPage, LandingPageType);
EnumAccessor(ChannelType, ChannelType);

如果我删除“InitAndDealloc”行,似乎我不能再在类中设置变量了。事实上,我也有工作(非 ARC)贝宝演示。

通过做这个:

SetExpressCheckoutRequestDetails *sreq = [[SetExpressCheckoutRequestDetails alloc] init];
sreq.ReturnURL = @"Bob";
NSLog(@"%@  ", sreq.ReturnURL );

在这两个项目中。我的将返回 null,贝宝的将返回 Bob。

它甚至与“InitAndDealloc”有关还是我看错了?如果是我如何在 ARC 项目中替换“InitAndDealloc”?我似乎找不到带有自动完成功能的简单“Init”,通过谷歌搜索“InitAndDealloc”我绝对没有得到任何结果:/

谢谢阅读!

4

1 回答 1

1

我以前从未使用过 MECL,但它被称为“InitAndDealloc”的方式肯定不是Objective C,因此不会受到 ARC 对 Objective C 要求的相同规则的约束。最好把它留在原处,不要试图搞砸或与之斗争。

但无论如何,与其努力尝试为某些已发布且可能存在问题的 SDK 代码启用 ARC,不如为 MECL 文件关闭ARC?

这是一个相关的问题,描述了如何为单个文件关闭 ARC。

于 2012-06-17T22:10:25.493 回答