1

我正在使用最新的 SDK 开发 iOS 5.0+ 应用程序。

我有这两种方法。

UserPreferences上课时。

+ (User*)getUserFromUserPreferences;

上课ProfileViewController时:

- (void)showUserData:(UserProfile*)userToShow;

并且UserProfile继承自User

@interface UserProfile : User

@property (nonatomic, strong) NSNumber* isBlockedByMe;
@property (nonatomic, strong) NSNumber* isMyFriend;

@end

最后,我有这段代码,它给了我一个警告:

[self showUserData:[User getUserFromUserPreferences]];

随着消息: Incompatible pointer types sending User* to parameter of type UserProfile*

如果我这样做是正确的吗?

[self showUserData:(UserProfile*)[User getUserFromUserPreferences]];

或者,我可能会遇到内存泄漏或任何其他问题。

4

2 回答 2

1

你有你的推导从后到前。您不能将基类实例 ( User) 传递给接受派生类实例 ( UserProfile) 的方法,但可以反过来。

如果您将方法更改为showUserData:(User *)userthen 它将同时接受UserUserProfile实例。

于 2013-11-14T08:46:51.530 回答
1

不,这是不正确的。它可能会使警告静音,但这样做并不理想。通常,您可以将派生类对象作为参数传递给接受基类实例的函数。你正在做的是另一种方式。

为什么这是错误的:由于您将基类对象强制类型转换为派生类,现在如果您尝试访问该对象中的派生类内存空间,它将在运行时崩溃。该对象不包含派生类部分。

希望有帮助!

于 2013-11-14T08:52:21.297 回答