不兼容的指针类型将User *发送到UserProfile类型的参数*

时间:2013-11-14 08:38:23

标签: ios iphone objective-c

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

我有这两种方法。

UserPreferences上课。

+ (User*)getUserFromUserPreferences;

ProfileViewController上课:

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

继承自UserProfile的<{1}}:

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*

或许,我会有内存泄漏或任何其他问题。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

希望有所帮助!